如何在条形图上绘制线

时间:2020-07-20 00:29:27

标签: python pandas matplotlib

我试图在条形图上绘制一条线,但是当我绘制该线时,条形图消失了-我的x索引值也消失了。谁能帮我在同一图中绘制线条和条形图?谢谢。我认为,我的问题是折线图和条形图相互重叠-但我希望它们共存。

plt.figure()
totalconfirm['Cases'].plot(kind='bar', rot=15, title="Cases per Day in all Michigan Counties", color='r', label = 'Confirmed Cases')
totalprob['Cases'].plot(kind = 'bar', rot=15, bottom=totalconfirm['Cases'], color = 'b', label = 'Probable Cases')
totalconfirm['Deaths'].plot(color = 'black', label = 'Deaths')

ax = plt.gca()
ax.xaxis.set_major_locator(plt.MaxNLocator(10)) 

ax.text(0.05, 0.95, "Total Tests: " + str(totaltotaltest), fontsize=10, transform=ax.transAxes,
        verticalalignment='top', bbox = dict(boxstyle='round', facecolor='wheat', alpha=0.5))

ax.set_xticklabels(df.index.format(), rotation='vertical', size=5)
plt.locator_params(axis='x', nbins=30)

plt.legend(loc="upper right")
plt.show()

此外,我如何将该文本框移动到图例下的右侧?

enter image description here

看过matplotlib plot bar and line charts togetherPandas plot bar chart over line并没有涵盖我想要的想法。

数据集:

Date
2020-03-01     0
2020-03-02     0
2020-03-03     0
2020-03-04     0
2020-03-05     0
2020-03-06     0
2020-03-07     0
2020-03-08     0
2020-03-09     0
2020-03-10     0
2020-03-11     0
2020-03-12     0
2020-03-13     0
2020-03-14     0
2020-03-15     0
2020-03-16     1
2020-03-17     0
2020-03-18     3
2020-03-19     5
2020-03-20     2
2020-03-21     8
2020-03-22    13
2020-03-23    21
2020-03-24    25
2020-03-25    24
2020-03-26    46
2020-03-27    49
2020-03-28    66
2020-03-29    62
2020-03-30    80
              ..
2020-06-19    11
2020-06-20     8
2020-06-21     8
2020-06-22    14
2020-06-23     9
2020-06-24     6
2020-06-25     8
2020-06-26     6
2020-06-27    11
2020-06-28     7
2020-06-29     7
2020-06-30     6
2020-07-01     7
2020-07-02    10
2020-07-03     9
2020-07-04     6
2020-07-05     5
2020-07-06     7
2020-07-07    10
2020-07-08     7
2020-07-09     8
2020-07-10     5
2020-07-11     7
2020-07-12     6
2020-07-13     4
2020-07-14     0
2020-07-15     6
2020-07-16     2
2020-07-17     3
2020-07-18     0
Name: Deaths, dtype: int64
Date
2020-03-01      14
2020-03-02      13
2020-03-03      22
2020-03-04      24
2020-03-05      26
2020-03-06      41
2020-03-07      48
2020-03-08      63
2020-03-09     122
2020-03-10     155
2020-03-11     200
2020-03-12     269
2020-03-13     360
2020-03-14     364
2020-03-15     462
2020-03-16     702
2020-03-17     766
2020-03-18     861
2020-03-19     738
2020-03-20     933
2020-03-21     784
2020-03-22     793
2020-03-23    1208
2020-03-24    1075
2020-03-25    1160
2020-03-26    1128
2020-03-27    1289
2020-03-28    1041
2020-03-29     893
2020-03-30    1532
              ... 
2020-06-19     285
2020-06-20     189
2020-06-21     227
2020-06-22     398
2020-06-23     441
2020-06-24     419
2020-06-25     386
2020-06-26     368
2020-06-27     296
2020-06-28     304
2020-06-29     482
2020-06-30     481
2020-07-01     539
2020-07-02     470
2020-07-03     397
2020-07-04     273
2020-07-05     374
2020-07-06     605
2020-07-07     554
2020-07-08     607
2020-07-09     509
2020-07-10     478
2020-07-11     276
2020-07-12     280
2020-07-13     513
2020-07-14     382
2020-07-15     312
2020-07-16     228
2020-07-17     141
2020-07-18       8
Name: Cases, dtype: int64

1 个答案:

答案 0 :(得分:2)

我已经使用plotly完成了此操作。我修改了Deaths以增加该值,以便可以看到折线图。

DataFrame:

 Date  Deaths  Cases
0   2020-03-01       5     14
1   2020-03-02       3     13
2   2020-03-03       6     22
3   2020-03-04       9     24
4   2020-03-05       5     26
5   2020-03-06       2     41
6   2020-03-07      10     28
7   2020-03-08       2     63
8   2020-03-09      10    122
9   2020-03-10      15    155
10  2020-03-11      20    200
11  2020-03-12      15    269
12  2020-03-13      20    360
13  2020-03-14      30    364
14  2020-03-15      40    462
15  2020-03-16     150    702
16  2020-03-17      70    766
17  2020-03-18      50    861
18  2020-03-19      30    738
19  2020-03-20     100    933
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import pandas as pd
import numpy as np

df = pd.read_csv("a.csv")
fig = make_subplots(1,1)

fig.add_trace(go.Bar(x=df['Date'], y=df['Cases'],
                     name='Cases',
                     marker_color = 'yellow',
                     opacity=0.4,
                     marker_line_color='rgb(8,48,107)',
                     marker_line_width=2),
              row = 1, col = 1)

fig.add_trace(go.Scatter(x=df['Date'], y=df['Deaths'], line=dict(color='red'), name='Deaths'),
              row = 1, col = 1)

fig.show()

图: enter image description here

使用熊猫绘图

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("a.csv")

fig, ax = plt.subplots(figsize = (15,8))
df.plot(x = 'Date', y = ['Deaths'], kind = 'line', ax = ax)
df.plot(x = 'Date', y= ['Cases'], kind = 'bar', ax = ax, colormap="RdYlBu")

enter image description here

更新: 要将日期用作索引

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("a.csv")
df.set_index("Date", inplace=True)

fig, ax = plt.subplots(figsize = (15,8))
df.plot( y = ['Deaths'], kind = 'line', ax = ax)
df.plot( y= ['Cases'], kind = 'bar', ax = ax, colormap="RdYlBu")

Date作为索引的数据框。绘制此图将得到与上述相同的图。

            Deaths  Cases
Date
2020-03-01       5     14
2020-03-02       3     13
2020-03-03       6     22
2020-03-04       9     24
2020-03-05       5     26
2020-03-06       2     41
2020-03-07      10     28
2020-03-08       2     63
2020-03-09      10    122
2020-03-10      15    155
2020-03-11      20    200
2020-03-12      15    269
2020-03-13      20    360