我想使用matplotlib从一个数据帧绘制多个变量,但最终的绘图看起来很奇怪

2024-09-27 21:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多家公司股票的数据框和一个日期列。我想在同一个图中,在y轴上绘制这些股票值,在x轴上绘制日期

每只股票的起价不同(例如亚马逊起价为3103美元,而苹果起价为112美元)

当我这样做的时候,我的情节是这样的

plot image

这是我的绘图代码:

import matplotlib.pyplot as plt

%matplotlib inline
fig2 = plt.figure()
ax2 = fig2.add_subplot('111')
ax2.plot(plot_stocks['Amazon High'])
ax2.plot(plot_stocks['Apple High'])
ax2.plot(plot_stocks['Facebook High'])
ax2.plot(plot_stocks['Microsoft High'])

以下是数据示例:

Date  Amazon High  Apple High Facebook High Microsoft High
0  2020-12-04     $3198.21   $122.8608       $283.46        $215.38
1  2020-12-03     $3228.64     $123.78       $286.65      $216.3757
2  2020-12-02        $3232     $123.37       $291.78        $215.47
3  2020-12-01     $3248.95   $123.4693        $289.3        $217.32
4  2020-11-30     $3228.39     $120.97        $277.7        $214.76
5  2020-11-27     $3216.19     $117.49       $279.13        $216.27
6  2020-11-25        $3198     $116.75       $280.18        $215.29
7  2020-11-24     $3134.25     $115.85     $277.8199        $214.25
8  2020-11-23    $3139.745   $117.6202     $270.9471        $212.29
9  2020-11-20     $3132.89     $118.77          $273       $213.285

我忘了提到的一件事是,高列是字符串,即使我这样做了,我也无法更改它们:

plot_stocks['Amazon High'] = plot_stocks['Amazon High'].replace(r'$', '')

Tags: 数据appleamazonfacebookplotmatplotlib绘制plt
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:06

您可以通过使用pd.MultiIndex.from_tuples()创建多索引来操作数据:

这使得plot自动为您提供所需的输出:

熊猫设置:

plot_stocks['Date'] = pd.to_datetime(plot_stocks['Date'])
plot_stocks = plot_stocks.replace('\$', '', regex=True)
plot_stocks.iloc[:,1:] = plot_stocks.iloc[:,1:].astype(float)
plot_stocks = plot_stocks.set_index('Date')
plot_stocks.columns = pd.MultiIndex.from_tuples([(col.split()[1], col.split()[0])
                                        for col in plot_stocks.columns])
plot_stocks
Out[1]: 
                High                              
              Amazon     Apple  Facebook Microsoft
Date                                              
2020-12-04  3198.210  122.8608  283.4600  215.3800
2020-12-03  3228.640  123.7800  286.6500  216.3757
2020-12-02  3232.000  123.3700  291.7800  215.4700
2020-12-01  3248.950  123.4693  289.3000  217.3200
2020-11-30  3228.390  120.9700  277.7000  214.7600
2020-11-27  3216.190  117.4900  279.1300  216.2700
2020-11-25  3198.000  116.7500  280.1800  215.2900
2020-11-24  3134.250  115.8500  277.8199  214.2500
2020-11-23  3139.745  117.6202  270.9471  212.2900
2020-11-20  3132.890  118.7700  273.0000  213.2850

Matplotlib代码:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
company_list = [col[1] for col in plot_stocks.columns]
plot_stocks.plot(ax=ax, title=f'Daily Stock Prices ({(", ").join(company_list)})')
ax.legend(title='Companies', labels=company_list)
ax.set_ylabel('Stock Prices')
plt.show()

enter image description here

相关问题 更多 >

    热门问题