我有一个数据集
a b c d
10-Apr-86 Jimmy 1 this is
11-Apr-86 Minnie 2 the way
12-Apr-86 Jimmy 3 the world
13-Apr-86 Minnie 4 ends
14-Apr-86 Jimmy 5 this is the
15-Apr-86 Eliot 6 way
16-Apr-86 Jimmy 7 the world ends
17-Apr-86 Eliot 8 not with a bang
18-Apr-86 Minnie 9 but a whimper
我想在matplotlib中创建一个看起来像这样的图表
我已经弄清楚如何使用以下代码获得点(没有注释):
df = (pd.read_csv('python.csv'))
df_wanted = pd.pivot_table(
df,
index='a',
columns='b',
values='c')
df_wanted.index = pd.to_datetime(df_wanted.index)
plt.scatter(df_wanted.index, df_wanted['Jimmy'])
plt.scatter(df_wanted.index,df_wanted['Minnie'])
plt.scatter(df_wanted.index,df_wanted['Eliot'])
我认为要注释,我需要一个值列表(如所示here)在我的数据透视表的最后一列
我的问题是:如何获得最后一栏' d'原始数据集成为我的数据透视表的最后一列?
我尝试了dat1 = pd.concat([df_wanted, df['d']], axis = 1)
- 但这会在我的数据框行下面创建一组新行。我意识到轴不是一样的,所以我尝试用d列作为值创建一个新的数据透视表 - 但得到了错误消息No numeric types to aggregate
。
我尝试了df_wanted2.append(df['d'])
- 但这为列d中的每个元素创建了一个新列。
有什么建议吗?最终,我希望这样做,以便当用鼠标滚动点时数据标签出现
答案 0 :(得分:1)
在这种特定情况下,您似乎不需要将列d设置为数据透视表的最后一列。
plt.scatter(df_wanted.index, df_wanted['Jimmy'])
plt.scatter(df_wanted.index,df_wanted['Minnie'])
plt.scatter(df_wanted.index,df_wanted['Eliot'])
plt.legend(loc=0)
for k, v in df.set_index('a').iterrows():
plt.text(k, v['c'], v['d']) # or: plt.annotate(xy=(k, v['c']), s=v['d'])