ConversionError: Failed to convert value(s) to axis units: '2015-01-01'
ConversionError: Failed to convert value(s) to axis units: '2015-01-01'
我正在尝试将值转换为轴单位。我检查了有类似问题的代码,但 none 解决了这个特定的挑战。如下图所示,预期图 (A) 应该在 x 轴上显示月份(一月、二月等),但它在图 (B) 中显示日期(2015-01 等)。
下面是源码,请大家指教。谢谢
plt.rcParams["font.size"] = 18
plt.figure(figsize=(20,5))
plt.plot(df.air_temperature,label="Air temperature at Frankfurt Int. Airport in 2015")
plt.xlim(("2015-01-01","2015-12-31"))
plt.xticks(["2015-{:02d}-15".format(x) for x in range(1,13,1)],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
plt.legend()
plt.ylabel("Temperature (°C)")
plt.show()
用日期时间绘制图的明智方法是使用 datetime
格式代替 str
;所以,首先,你应该做这个转换:
df = pd.read_csv(r'data/frankfurt_weather.csv')
df['time'] = pd.to_datetime(df['time'], format = '%Y-%m-%d %H:%M')
然后就可以随意设置剧情了,最好按照Object Oriented Interface:
plt.rcParams['font.size'] = 18
fig, ax = plt.subplots(figsize = (20,5))
ax.plot(df['time'], df['air_temperature'], label = 'Air temperature at Frankfurt Int. Airport in 2015')
ax.legend()
ax.set_ylabel('Temperature (°C)')
plt.show()
然后你可以自定义:
x 刻度的标签格式和位置 matplotlib.dates
:
ax.xaxis.set_major_locator(md.MonthLocator(interval = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%b'))
x轴限制:
ax.set_xlim([pd.to_datetime('2015-01-01', format = '%Y-%m-%d'),
pd.to_datetime('2015-12-31', format = '%Y-%m-%d')])
月份名称的 x 刻度标签的首字母大写
fig.canvas.draw()
ax.set_xticklabels([month.get_text().title() for month in ax.get_xticklabels()])
完整代码
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
df = pd.read_csv(r'data/frankfurt_weather.csv')
df['time'] = pd.to_datetime(df['time'], format = '%Y-%m-%d %H:%M')
plt.rcParams['font.size'] = 18
fig, ax = plt.subplots(figsize = (20,5))
ax.plot(df['time'], df['air_temperature'], label = 'Air temperature at Frankfurt Int. Airport in 2015')
ax.legend()
ax.set_ylabel('Temperature (°C)')
ax.xaxis.set_major_locator(md.MonthLocator(interval = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%b'))
ax.set_xlim([pd.to_datetime('2015-01-01', format = '%Y-%m-%d'),
pd.to_datetime('2015-12-31', format = '%Y-%m-%d')])
fig.canvas.draw()
ax.set_xticklabels([month.get_text().title() for month in ax.get_xticklabels()])
plt.show()
我正在尝试将值转换为轴单位。我检查了有类似问题的代码,但 none 解决了这个特定的挑战。如下图所示,预期图 (A) 应该在 x 轴上显示月份(一月、二月等),但它在图 (B) 中显示日期(2015-01 等)。
下面是源码,请大家指教。谢谢
plt.rcParams["font.size"] = 18
plt.figure(figsize=(20,5))
plt.plot(df.air_temperature,label="Air temperature at Frankfurt Int. Airport in 2015")
plt.xlim(("2015-01-01","2015-12-31"))
plt.xticks(["2015-{:02d}-15".format(x) for x in range(1,13,1)],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
plt.legend()
plt.ylabel("Temperature (°C)")
plt.show()
用日期时间绘制图的明智方法是使用 datetime
格式代替 str
;所以,首先,你应该做这个转换:
df = pd.read_csv(r'data/frankfurt_weather.csv')
df['time'] = pd.to_datetime(df['time'], format = '%Y-%m-%d %H:%M')
然后就可以随意设置剧情了,最好按照Object Oriented Interface:
plt.rcParams['font.size'] = 18
fig, ax = plt.subplots(figsize = (20,5))
ax.plot(df['time'], df['air_temperature'], label = 'Air temperature at Frankfurt Int. Airport in 2015')
ax.legend()
ax.set_ylabel('Temperature (°C)')
plt.show()
然后你可以自定义:
x 刻度的标签格式和位置
matplotlib.dates
:ax.xaxis.set_major_locator(md.MonthLocator(interval = 1)) ax.xaxis.set_major_formatter(md.DateFormatter('%b'))
x轴限制:
ax.set_xlim([pd.to_datetime('2015-01-01', format = '%Y-%m-%d'), pd.to_datetime('2015-12-31', format = '%Y-%m-%d')])
月份名称的 x 刻度标签的首字母大写
fig.canvas.draw() ax.set_xticklabels([month.get_text().title() for month in ax.get_xticklabels()])
完整代码
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
df = pd.read_csv(r'data/frankfurt_weather.csv')
df['time'] = pd.to_datetime(df['time'], format = '%Y-%m-%d %H:%M')
plt.rcParams['font.size'] = 18
fig, ax = plt.subplots(figsize = (20,5))
ax.plot(df['time'], df['air_temperature'], label = 'Air temperature at Frankfurt Int. Airport in 2015')
ax.legend()
ax.set_ylabel('Temperature (°C)')
ax.xaxis.set_major_locator(md.MonthLocator(interval = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%b'))
ax.set_xlim([pd.to_datetime('2015-01-01', format = '%Y-%m-%d'),
pd.to_datetime('2015-12-31', format = '%Y-%m-%d')])
fig.canvas.draw()
ax.set_xticklabels([month.get_text().title() for month in ax.get_xticklabels()])
plt.show()