我想从df
创建一个新的框架,并在每个新创建的框架(Emins,FTSE,Stoxx和Nikkei)的折线图中使用Dates作为x轴。
我从data.xlsx创建了一个名为df
的框架,它看起来像这样:
Dates ES1 Z 1 VG1 NK1
0 2005-01-04 -0.0126 0.0077 -0.0030 0.0052
1 2005-01-05 -0.0065 -0.0057 0.0007 -0.0095
2 2005-01-06 0.0042 0.0017 0.0051 0.0044
3 2005-01-07 -0.0017 0.0061 0.0010 -0.0009
4 2005-01-11 -0.0065 -0.0040 -0.0147 0.0070
3670 2020-09-16 -0.0046 -0.0065 -0.0003 -0.0009
3671 2020-09-17 -0.0083 -0.0034 -0.0039 -0.0086
3672 2020-09-18 -0.0024 -0.0009 -0.0009 0.0052
3673 2020-09-23 -0.0206 0.0102 0.0022 -0.0013
3674 2020-09-24 0.0021 -0.0136 -0.0073 -0.0116
从df
,我创建了4个新的加密货币,分别是Eminis,FTSE,Stoxx和Nikkei。
感谢您的帮助!
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('classic')
df = pd.read_excel('data.xlsx')
df = df.rename(columns={'Dates':'Date','ES1': 'Eminis', 'Z 1': 'FTSE','VG1': 'Stoxx','NK1': 'Nikkei','TY1': 'Notes','G 1': 'Gilts', 'RX1': 'Bunds','JB1': 'JGBS','CL1': 'Oil','HG1': 'Copper','S 1': 'Soybeans','GC1': 'Gold','WILLTIPS': 'TIPS'})
headers = df.columns
Eminis = df[['Date','Eminis']]
FTSE = df[['Date','FTSE']]
Stoxx = df[['Date','Stoxx']]
Nikkei = df[['Date','Nikkei']]
# create multiple plots via plt.subplots(rows,columns)
fig, axes = plt.subplots(2,2, figsize=(20,15))
x = Date
y1 = Eminis
y2 = Notes
y3 = Stoxx
y4 = Nikkei
# one plot on each subplot
axes[0][0].line(x,y1)
axes[0][1].line(x,y2)
axes[1][0].line(x,y3)
axes[1][1].line(x,y4)
plt.legends()
plt.show()
2条答案
按热度按时间jjhzyzn01#
优雅的解决方案是:
代码如下:
为了测试上面的代码,我创建了以下DataFrame:
得到了下面的图片:
由于我的测试数据是随机的,我假设“7天”的频率,使图片没有太多的“混乱”。在您的真实的数据的情况下,考虑例如使用“7 D”频率和 mean() 聚合函数进行重新排序。
n3h0vuf22#
.melt
从宽格式转换为长(整洁)格式。seaborn.relplot
,它可以从一个长格式的框架创建一个FacetGrid
。seaborn
是matplotlib
的高级API,使绘图变得更加容易。我到底做错了什么
Date
未为x = Date
定义y2 = Notes
:Notes
未定义.line
不是plt
方法,并导致AttributeError
;它应该是plt.plot
y1 - y4
是DataFrames,但传递给y轴的plot方法,这会导致TypeError: unhashable type: 'numpy.ndarray'
;一列应该作为y
传递。.legends
不是一个方法;它是.legend