Datetime 散点图的不同颜色渐变取决于时间(Matplotlib)

Datetime 散点图的不同颜色渐变取决于时间(Matplotlib),datetime,matplotlib,data-visualization,scatter-plot,colorbar,Datetime,Matplotlib,Data Visualization,Scatter Plot,Colorbar,我有一个数据集,形状如下 import pandas as pd catalog=pd.read_table("Catalog/MainshockCatalog.txt", sep="\t", names=["Year", "Month", "Day", "Hour", "Min", "Sec",

我有一个数据集,形状如下

import pandas as pd

catalog=pd.read_table("Catalog/MainshockCatalog.txt", sep="\t", 
                  names=["Year", "Month", "Day", "Hour", "Min", "Sec", "Lat",
                        "Lon", "Depth", "Mag"])
catalog

我使用
Axes3D
绘制了每个事件的地图,坐标以
catalog
DataFrame的
Lat
Lon
Depth
列给出

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig=plt.figure(figsize=(30, 20))
ax=fig.add_subplot(111, projection='3d')

x=catalog["Lat"]
y=catalog["Lon"]
z=-catalog["Depth"]

ax.scatter(x, y, z, c='k', marker='o', s=50, alpha=0.1, facecolors='none')
ax.scatter(x[0], y[0], z[0], c='b', marker='*', s=1500, label="$M_L$ 5.4 Mainshock")
ax.scatter(x[2395], y[2395], z[2395], c='r', marker='*', s=1500, label="$M_L$ 4.6 Aftershock")

ax.set_xlabel('Latitude ($^\circ$)', fontsize=30, labelpad=30)
ax.set_ylabel('Longitude ($^\circ$)', fontsize=30, labelpad=30)
ax.set_zlabel('Depth (km)', fontsize=30, labelpad=20)

ax.set_zticklabels(['8','7','6','5','4','3','2'])

ax.xaxis.set_tick_params(labelsize=20)
ax.yaxis.set_tick_params(labelsize=20)
ax.zaxis.set_tick_params(labelsize=20)

plt.legend(prop={'size': 30})
plt.show()
结果图如下所示。

在这个图中,每个点的颜色都是相同的。但是,我希望随着相关时间(
小时
分钟
)随色条的增加而平滑地变化。该示例如下所示(尽管颜色随深度而变化,但本示例中的颜色随时间而变化)


我一直在做一些测试,我已经让它起作用了

  • 目录
    数据框上创建一个新列,时间信息采用
    日期时间
    格式。为此,请使用:
  • collect['DateHour']=pd.to_datetime(collect['Year'].astype(str)\
    +“/”+collect['Month'].astype(str)+“/”+\
    收集['Day'].astype(str)\
    +“T”+collect['Hour'].astype(str)+':“+collect['Min'].astype(str)\
    “:”+collect['Sec'].astype(str))
    
    2A。通过在
    ax.scatter
    函数的
    c
    参数中指示,您可以使用此新列将其直接绘制为颜色,但它可能不会形成非常漂亮的色条

    2B。或者,如果您希望有一个colobar,例如指示与特定日期时间(例如数据中的第一个日期)的时间差(以天为单位),您可以创建一个新的列,只需将
    collect['DateHour']
    列与正确格式化的日期时间实例(或取自
    collect['DateHour']
    )的时间差,然后将时间增量转换为所需的单位,以测量时间增量。您可以查看如何将
    timedelta64
    转换为方便的时间度量。在本例中,它被转换为天:

    collect['dt_days']=(collect['DateHour']-pd.to_datetime('2002-02-03T13:56:03.172'))\
    /np.timedelta64(1,‘D’)
    

    3B。使用此列,在
    ax.scatter的
    c
    参数中指出它。您的建议非常成功。谢谢