(python) 使用 matplotlib 在 3D 散点图中按日期添加颜色条
(python) Adding a colorbar by the dates of points in a 3D scatter plot with matplotlib
我正在尝试在 3D 图中绘制特定区域的地震,并使用颜色作为显示事件 time/date 的一种方式。数据点的颜色准确,但是,当我绘制颜色条时,它只显示 0.0 到 1.0。如何让颜色条显示日期作为其标签?
我的 dates
变量是“YYYY-MM-DD”格式的日期列表。
%matplotlib notebook
from mpl_toolkits.mplot3d import axes3d
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
ax.scatter(longitude, latitude, -depth, c=mdates.date2num(dates), cmap='magma')
fig.colorbar(mpl.cm.ScalarMappable(cmap='magma'))
plt.show()
因为你没有提供数据,我只好随机生成了。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.colors import Normalize
import numpy as np
# generate random data and dates
longitude = np.random.uniform(0, 1, 100)
latitude = np.random.uniform(0, 1, 100)
depth = np.random.uniform(0, 1, 100)
dates = []
for i in range(1, 13):
for j in range(1, 25):
if j < 10: n = "0" + str(j)
else: n = j
if i < 10: m = "0" + str(i)
else: n = i
dates.append("2022-{}-{}".format(m, n))
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
colors = mdates.date2num(dates[:100])
ax.scatter(longitude, latitude, -depth, c=colors, cmap='magma')
norm = Normalize(vmin=colors.min(), vmax=colors.max())
# choose a proper number of ticks to be shown on the colorbar
N = 5
ticks = np.linspace(colors.min(), colors.max(), N)
# convert the tick back to date format
labels = [mdates.num2date(t).strftime("%Y-%m-%d") for t in ticks]
cb = fig.colorbar(
mpl.cm.ScalarMappable(norm=norm, cmap='magma'),
ticks=ticks,
ax=ax,
label="Date"
)
cb.ax.set_yticklabels(labels)
plt.show()
我正在尝试在 3D 图中绘制特定区域的地震,并使用颜色作为显示事件 time/date 的一种方式。数据点的颜色准确,但是,当我绘制颜色条时,它只显示 0.0 到 1.0。如何让颜色条显示日期作为其标签?
我的 dates
变量是“YYYY-MM-DD”格式的日期列表。
%matplotlib notebook
from mpl_toolkits.mplot3d import axes3d
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
ax.scatter(longitude, latitude, -depth, c=mdates.date2num(dates), cmap='magma')
fig.colorbar(mpl.cm.ScalarMappable(cmap='magma'))
plt.show()
因为你没有提供数据,我只好随机生成了。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.colors import Normalize
import numpy as np
# generate random data and dates
longitude = np.random.uniform(0, 1, 100)
latitude = np.random.uniform(0, 1, 100)
depth = np.random.uniform(0, 1, 100)
dates = []
for i in range(1, 13):
for j in range(1, 25):
if j < 10: n = "0" + str(j)
else: n = j
if i < 10: m = "0" + str(i)
else: n = i
dates.append("2022-{}-{}".format(m, n))
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
colors = mdates.date2num(dates[:100])
ax.scatter(longitude, latitude, -depth, c=colors, cmap='magma')
norm = Normalize(vmin=colors.min(), vmax=colors.max())
# choose a proper number of ticks to be shown on the colorbar
N = 5
ticks = np.linspace(colors.min(), colors.max(), N)
# convert the tick back to date format
labels = [mdates.num2date(t).strftime("%Y-%m-%d") for t in ticks]
cb = fig.colorbar(
mpl.cm.ScalarMappable(norm=norm, cmap='magma'),
ticks=ticks,
ax=ax,
label="Date"
)
cb.ax.set_yticklabels(labels)
plt.show()