背景:我从一个大的DataFrame
中过滤了3日至9日(星期一至星期日)的year=2013
,month=June
的条目。然后,我将数据按day
,hour
和user_type
分组,然后旋转表以获取一个DataFrame
,看起来像:
Day Hour Casual Registered Casual_percentage
0 3 0 14 19 42.42
1 3 1 8 8 50.00
2 3 2 1 3 25.00
3 3 3 2 1 66.67
4 3 4 1 3 25.00
5 3 5 1 17 5.56
. . . . . .
每天我有24小时,因此对于第4天(星期二),数据开始如下:
. . . . . .
21 3 21 32 88 26.67
22 3 22 26 64 28.89
23 3 23 23 30 43.40
24 4 0 10 11 47.62
25 4 1 1 5 16.67
26 4 2 1 1 50.00
. . . . . .
如何为Casual
的7个Registered
中的每个Hour
绘制Day
和Days
变量?我需要创建7个不同的图并将它们对齐到1个图中吗?
当前代码。我觉得我要离开。我还尝试使用second x-axis创建一个documentation(用于def make_patch_spines_invisible(ax):
ax.set_frame_on(True)
ax.patch.set_visible(False)
for sp in ax.spines.values():
sp.set_visible(False)
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.set(xlabel='Hours', ylabel='Total # of trips started')
ax1.plot(data.Hour, data.Casual, color='g')
ax1.plot(data.Hour, data.Registered, color='b')
"""This part is trying to create the 2nd x-axis (Days)"""
ax2 = ax1.twinx()
#offset the bottom spine
ax2.spines['bottom'].set_position(('axes', -.5))
make_patch_spines_invisible(ax2)
#show bottomm spine
ax2.spines['bottom'].set_visible(True)
ax2.set_xlabel("Days")
plt.show()
)。
{{1}}
答案 0 :(得分:1)
我认为,如果您使用datetime
对象而不是Day
,Hour
字符串,这应该会更容易。
这样,您将可以使用date tick locators and formatters
以及major and minor ticks。
即使您没有提到它,我也假定您可以使用pandas
处理数据帧。
我创建了一个新的数据框,方法是复制多次提供的数据并剪切其中的一些数据(这并不重要)。
在这里,我根据您提供的信息重建了日期,但我建议直接使用它们(我想原始数据框中有某种类似日期的字段)。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
df = pd.read_csv("mydataframe.csv")
df["timestamp"] = "2013-06-" + df["Day"].astype(str).str.zfill(2) + "-" + df["Hour"].astype(str).str.zfill(2)
df["timestamp"] = pd.to_datetime(df["timestamp"], format="%Y-%m-%d-%H")
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.set(xlabel='', ylabel='Total # of trips started')
ax1.plot(df["timestamp"], df.Casual, color='g')
ax1.plot(df["timestamp"], df.Registered, color='b')
ax1.xaxis.set(
major_locator=mdates.DayLocator(),
major_formatter=mdates.DateFormatter("\n\n%A"),
minor_locator=mdates.HourLocator((0, 12)),
minor_formatter=mdates.DateFormatter("%H"),
)
plt.show()
输出:
答案 1 :(得分:0)