# 读取数据 df = pd.read_excel('E:/应统案例大赛/附件1-股票交易数据/yuceclose5.xlsx', usecols=[ 1, 2, 3, 4, 5]) # 计算涨跌幅 change = df.pct_change() # 绘制图表 change.plot() plt.xlabel('date') plt.ylabel('Change') plt.title('Stock Prices Change') plt.legend(loc='upper left') plt.autoscale(enable=True, axis='x', tight=True) plt.show()修改代码,使横坐标为对应的表格中的日期
时间: 2023-12-04 11:03:04 浏览: 62
可以通过以下方式修改代码来实现:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_excel('E:/应统案例大赛/附件1-股票交易数据/yuceclose5.xlsx', usecols=[1, 2, 3, 4, 5], index_col=0, parse_dates=True)
# 计算涨跌幅
change = df.pct_change()
# 绘制图表
change.plot()
plt.xlabel('Date')
plt.ylabel('Change')
plt.title('Stock Prices Change')
plt.legend(loc='upper left')
plt.autoscale(enable=True, axis='x', tight=True)
plt.show()
```
这里添加了 `index_col=0` 和 `parse_dates=True` 参数来将第一列日期作为索引,并将其解析为日期格式。然后将横坐标标签改为 `Date`。这样就可以使横坐标为对应的表格中的日期了。
相关问题
import pandas as pd import matplotlib.pyplot as plt # 读取数据 df = pd.read_excel('E:/应统案例大赛/附件1-股票交易数据/yuceclose5.xlsx', usecols=[0,1, 2, 3, 4, 5], index_col=0, parse_dates=True) # 计算涨跌幅 change = df.pct_change() # 绘制图表 fig = plt.figure(figsize=(60,6)) change.plot() plt.xlabel('日期') plt.ylabel('涨跌幅') plt.title('股票涨跌幅') plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5)) plt.autoscale(enable=True, axis='x', tight=True) plt.savefig(f'E:/应统案例大赛/附件1-股票交易数据/股票涨跌幅.jpg') plt.show()放五张图并合起来
可以使用`subplots`函数创建一个包含5个子图的画布,并在每个子图中分别绘制涨跌幅数据。然后使用`savefig`函数将整个画布保存为一张图片。代码如下:
```
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_excel('E:/应统案例大赛/附件1-股票交易数据/yuceclose5.xlsx', usecols=[0,1, 2, 3, 4, 5], index_col=0, parse_dates=True)
# 计算涨跌幅
change = df.pct_change()
# 创建画布
fig, axs = plt.subplots(nrows=5, ncols=1, figsize=(20, 20))
# 绘制子图
axs[0].plot(change['股票1'])
axs[0].set_title('股票1')
axs[1].plot(change['股票2'])
axs[1].set_title('股票2')
axs[2].plot(change['股票3'])
axs[2].set_title('股票3')
axs[3].plot(change['股票4'])
axs[3].set_title('股票4')
axs[4].plot(change['股票5'])
axs[4].set_title('股票5')
# 设置横轴标签和标题
plt.xlabel('日期')
fig.suptitle('股票涨跌幅')
# 调整子图之间的间距
plt.tight_layout()
# 保存图片
plt.savefig(f'E:/应统案例大赛/附件1-股票交易数据/股票涨跌幅.jpg')
# 显示图片
plt.show()
```
这样就可以将5张图片绘制在一起,并保存为一张图片。其中`nrows`和`ncols`参数分别指定子图的行数和列数,`figsize`参数指定整个画布的大小,`axs`变量保存了所有子图的Axes对象,可以通过索引访问每个子图。`tight_layout`函数可以调整子图之间的间距,使得整个画布更加紧凑。
# 循环调用绘图函数 for i in range(1, 15): filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.xlsx' # 根据数据文件名字生成文件路径 df = pd.read_excel(filename) # 读取数据 plot_k_line(df) # 绘制K线图 plt.savefig('E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg') plt.show() # 显示图表 为什么只保存了一个图片
你的代码中使用了 f-string 来构造文件名,但是你在调用 `plt.savefig()` 函数时,文件名中的 f-string 没有被正确地格式化,因为你使用了单引号字符串而不是 f-string。你可以将单引号替换为双引号来解决这个问题,例如:
```
plt.savefig(f"E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg")
```
这将确保文件名中的 f-string 被正确地格式化。如果你仍然只保存了一个图片,可能是由于你的代码中存在其他问题。你可以在循环中打印出每个数据框的名称和保存的文件名,以便进行调试。例如:
```
for i in range(1, 15):
filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.xlsx'
df = pd.read_excel(filename)
print(f"Processing file {filename}...")
plot_k_line(df)
plt.savefig(f'E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg')
plt.show()
```
这将在每次循环中打印出正在处理的文件名,以便你查看是否正确地处理了所有文件。
阅读全文