日期与时间图上数据的颜色映射
Color mapping of data on a date vs time plot
我正在尝试在二维图上绘制 3 个变量 x、y、z,x(日期)在 x 轴上,y(时间)在 y 轴上,z(温度)用色标映射。
我在 pandas Dataframe 中提供了三个可用变量,并创建了一个带有日期编号的额外列,以便 matplotlib 可以使用它。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data=pd.DataFrame()
data['datenum']=mdates.date2num(data['Date'])
示例:
Date Time Tgrad datenum
0 2016-08-01 00 -0.841203 736177.0
1 2016-08-01 01 -0.629176 736177.0
2 2016-08-01 02 -0.623608 736177.0
3 2016-08-01 03 -0.615145 736177.0
4 2016-08-01 04 -0.726949 736177.0
5 2016-08-01 05 -0.788864 736177.0
6 2016-08-01 06 -0.794655 736177.0
7 2016-08-01 07 -0.775724 736177.0
8 2016-08-01 08 -0.677951 736177.0
我一直在尝试遵循以下建议:
matplotlib 2D plot from x,y,z values
Dates in the xaxis for a matplotlib plot with imshow
但我认为由于输入数据的错误形状而没有成功。我试过这样的事情:
fig, ax = plt.subplots()
ax.imshow(data['Tgrad'], extent = [min(data['datenum']), max(data['datenum']),min(data['Time']), max(data['Time'])], cmap="autumn", aspect = "auto")
ax.xaxis_date()
但是得到一个 ValueError:
ValueError: setting an array element with a sequence
是否需要将数据作为 numpy 数组或任何其他类型?一旦我拥有不同格式的数据,我该如何映射?
感谢您的帮助。
弗罗尼
imshow
需要一个二维数组作为输入。您需要将数据重新格式化为二维数组:Date
x Time
并将 Tgrad
作为您的值。 Pandas 使用 pivot
使这变得相当容易。它确实需要您拥有很好的 spaced 个数据点,即类似网格的数据集(每个 Date
具有相同的 Time
值)。如果数据点没有整齐地分散在 2d space 中,您链接的 post 将很有用。此外,无需转换为 numpy 数组,因为 matplotlib 可以处理数据帧。
C = data.pivot(index='Time', columns='Date', values='Tgrad')
fig, ax = plt.subplots()
ax.imshow(C)
我正在尝试在二维图上绘制 3 个变量 x、y、z,x(日期)在 x 轴上,y(时间)在 y 轴上,z(温度)用色标映射。 我在 pandas Dataframe 中提供了三个可用变量,并创建了一个带有日期编号的额外列,以便 matplotlib 可以使用它。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data=pd.DataFrame()
data['datenum']=mdates.date2num(data['Date'])
示例:
Date Time Tgrad datenum
0 2016-08-01 00 -0.841203 736177.0
1 2016-08-01 01 -0.629176 736177.0
2 2016-08-01 02 -0.623608 736177.0
3 2016-08-01 03 -0.615145 736177.0
4 2016-08-01 04 -0.726949 736177.0
5 2016-08-01 05 -0.788864 736177.0
6 2016-08-01 06 -0.794655 736177.0
7 2016-08-01 07 -0.775724 736177.0
8 2016-08-01 08 -0.677951 736177.0
我一直在尝试遵循以下建议:
matplotlib 2D plot from x,y,z values Dates in the xaxis for a matplotlib plot with imshow
但我认为由于输入数据的错误形状而没有成功。我试过这样的事情:
fig, ax = plt.subplots()
ax.imshow(data['Tgrad'], extent = [min(data['datenum']), max(data['datenum']),min(data['Time']), max(data['Time'])], cmap="autumn", aspect = "auto")
ax.xaxis_date()
但是得到一个 ValueError:
ValueError: setting an array element with a sequence
是否需要将数据作为 numpy 数组或任何其他类型?一旦我拥有不同格式的数据,我该如何映射?
感谢您的帮助。 弗罗尼
imshow
需要一个二维数组作为输入。您需要将数据重新格式化为二维数组:Date
x Time
并将 Tgrad
作为您的值。 Pandas 使用 pivot
使这变得相当容易。它确实需要您拥有很好的 spaced 个数据点,即类似网格的数据集(每个 Date
具有相同的 Time
值)。如果数据点没有整齐地分散在 2d space 中,您链接的 post 将很有用。此外,无需转换为 numpy 数组,因为 matplotlib 可以处理数据帧。
C = data.pivot(index='Time', columns='Date', values='Tgrad')
fig, ax = plt.subplots()
ax.imshow(C)