【发布时间】:2019-02-13 20:52:50
【问题描述】:
我正在尝试在同一张图上绘制来自 pandas 数据框的几列,温度为线性,雨为条共享相同的 x 日期和单独的 y 尺度。
我想出了如何将它们绘制为单独的 LINE(x-y 散点图)并且它们共享相同的 x 日期。我也可以玩颜色。最终,我想要 3 条温度线和用于雨的列(条),并使第二个 y 尺度(用于雨)更大,以便条不与温度重叠。 pyplot可以吗?
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
myDates = doystats['Fdate']
myValues = doystats['T2M_mean']
ax1.plot(myDates, myValues, 'g')
ax1.set_xlabel('Dates')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('Temperature, C')
ax1.tick_params('y', colors='g')
ax2 = ax1.twinx()
myRain = doystats['PRECTOT_mean']
ax2.plot(myDates, myRain, color='b')
ax2.set_ylabel('Precipitation, mm', color='b')
ax2.tick_params('y', colors='b')
myFmt = mdates.DateFormatter('%b-%d')
ax1.xaxis.set_major_formatter(myFmt)
fig.tight_layout()
plt.show()
此代码生成两个带有两个 y 轴的折线图。
如果我将其更改为同时绘制 vs 'DOY_'(integer) 而不是 "Fdate' (datetime) - 没有 DateFormatter 块(如果包含,现在会导致错误),我可以生成如下线/条形图。
myDates = doystats['DOY_']
ax2.bar(myDates, myRain, color='b')
#myFmt = mdates.DateFormatter('%b-%d')
#ax1.xaxis.set_major_formatter(myFmt)
解决方法可能是对“DOY_”进行绘图,但以某种方式即时重新计算日期并格式化为 MON? 这是数据的链接https://pylab-landviser.notebooks.azure.com/j/edit/PR2_1981-2018_stat.csv 和整个木星NB https://pylab-landviser.notebooks.azure.com/j/notebooks/WeatherDaily-Copy.ipynb
【问题讨论】:
-
如何在问题或 cmets 中插入图像?谢谢。
-
ax2.bar()有效吗? matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html -
不,它没有。 x 轴采用日期时间格式。
-
ax2.bar() 仅当我在列(整数)DayOfYear 上绘制 x 轴时才有效。但是如何在第一张图片中以特定格式 Mon-01 呈现 x 轴? !dayofyear
-
您能否在edit 您的帖子中包含一些示例数据并澄清条形图在您使用整数天时有效,但在您使用日期时间时无效?
标签: python pandas matplotlib