# 绘制每个股票的K线图 fig, ax = plt.subplots() for name, group in groups: title_dict = {"title": name} mpf.plot(group, type='candle', mav=(5, 10, 20), volume=True, show_nontrading=True, title=title_dict)TypeError: Expect data.index as DatetimeIndex修改代码
时间: 2024-02-21 17:58:53 浏览: 23
在这个代码中,你需要将每个股票的数据的索引转换为`DatetimeIndex`类型,然后再调用`mpf.plot`函数进行绘图。可以在`for`循环中对每个股票的数据进行索引转换,具体代码如下:
```
import pandas as pd
import mplfinance as mpf
import matplotlib.pyplot as plt
for name, group in groups:
# 将索引转换为DatetimeIndex类型
group.index = pd.to_datetime(group.index)
title_dict = {"title": name}
mpf.plot(group, type='candle', mav=(5, 10, 20), volume=True, show_nontrading=True, title=title_dict)
plt.show() # 显示每个股票的K线图
```
在这个代码中,我们使用`pd.to_datetime`函数将每个股票的数据的索引转换为`DatetimeIndex`类型,然后再将修改后的数据传递给`mpf.plot`函数进行绘图,并使用`plt.show()`函数显示每个股票的K线图。这样,你就可以避免出现“Expect data.index as DatetimeIndex”这个错误了。
相关问题
import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体 # 读取数据 df = pd.read_excel('200马力拖拉机明细.xlsx') fig= plt.figure(figsize=(1000, 1000), dpi=300) # 绘制箱线图 fig, ax = plt.subplots() bp = df.boxplot(column='sale', by=['FactoryName', 'JiJXH'], ax=ax,rot=90, grid=False) # 修改横轴标签 xtick_labels = [label.get_text() for label in ax.get_xticklabels()] new_xtick_labels = [label.replace(' ', '\n') for label in xtick_labels] ax.set_xticklabels(new_xtick_labels) # 绘制折线图 median_dict = df.groupby(['FactoryName', 'JiJXH'])['sale'].median().to_dict() for i, label in enumerate(xtick_labels): factory_jijxh = tuple(label.split('\n')) median = median_dict.get(factory_jijxh, None) if median is not None: ax.plot(i+1, median, marker='-', color='red') # 显示图形 plt.show() 怎样使图变大
可以调整 `figsize` 参数来改变图的大小,例如将宽度设为 20,高度设为 10:
```
fig= plt.figure(figsize=(20, 10), dpi=300)
```
另外,如果图显示不全,可以调整 `plt.subplots_adjust()` 来控制子图之间的间距,例如:
```
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.1, right=0.9, bottom=0.2, top=0.9, wspace=0.3, hspace=0.3)
bp = df.boxplot(column='sale', by=['FactoryName', 'JiJXH'], ax=ax,rot=90, grid=False)
```
其中,`left` 和 `right` 控制左右边距,`bottom` 和 `top` 控制上下边距,`wspace` 和 `hspace` 控制子图之间的宽度和高度间距。
fig, ax = plt.subplots() ax.plot(new_name_lst, x_list, label='velocity_x') ax.plot(new_name_lst, y_list, label='velocity_y') ax.plot(new_name_lst, list3, label='velocity') # leg = ax.legend(loc='upper left', fancybox=True, shadow=True) leg.get_frame().set_alpha(0.5) lines = [l for l in ax.lines] lined = dict() for legline, origline in zip(leg.get_lines(), lines): legline.set_picker(True) lined[legline] = origline def onpick(event): legline = event.artist origline = lined[legline] visible = not origline.get_visible() origline.set_visible(visible) if visible: legline.set_alpha(1.0) else: legline.set_alpha(0.2) fig.canvas.draw() fig.canvas.mpl_connect('pick_event', onpick) plt.show()这个代码加一个跟随鼠标的虚线
你可以尝试添加以下代码来实现跟随鼠标的虚线:
```python
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
# 假设你已经有了名为 new_name_lst、x_list、y_list 和 list3 的变量
ax.plot(new_name_lst, x_list, label='velocity_x')
ax.plot(new_name_lst, y_list, label='velocity_y')
ax.plot(new_name_lst, list3, label='velocity')
leg = ax.legend(loc='upper left', fancybox=True, shadow=True)
leg.get_frame().set_alpha(0.5)
lines = [l for l in ax.lines]
lined = dict()
for legline, origline in zip(leg.get_lines(), lines):
legline.set_picker(True)
lined[legline] = origline
def onpick(event):
legline = event.artist
origline = lined[legline]
visible = not origline.get_visible()
origline.set_visible(visible)
if visible:
legline.set_alpha(1.0)
else:
legline.set_alpha(0.2)
fig.canvas.draw()
# 添加跟随鼠标的虚线
if isinstance(event.artist, plt.Line2D):
xdata = event.artist.get_xdata()
ydata = event.artist.get_ydata()
x = event.mouseevent.xdata
y = event.mouseevent.ydata
idx = np.searchsorted(xdata, x)
if idx < len(xdata) and abs(x - xdata[idx]) > abs(x - xdata[idx-1]):
idx -= 1
if idx >= len(xdata) or idx == 0:
return
x = xdata[idx]
y = ydata[idx]
if not hasattr(ax, 'vline'):
ax.vline = ax.axvline(x=x, color='k', linestyle='--')
else:
ax.vline.set_xdata([x, x])
ax.vline.set_ydata([min(y, ax.get_ylim()[1]), max(y, ax.get_ylim()[0])])
fig.canvas.mpl_connect('pick_event', onpick)
plt.show()
```
这个代码会在图形中添加一个跟随鼠标的垂直虚线,当鼠标拾取到某个线条时,虚线会跟随鼠标移动到该线条上。