How to plot a line over a bar chart

2024/11/20 23:32:55

I am trying to plot a line over a bar chart, but when I plotted the line the bar chart disappeared - and so did my x index values. Can anyone help me plot the line and the bar in the same figure? Thank you. My problem, I believe, is that the line and bar charts are overuling each other - but I want them to coexist.

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()

Additionally, how would I move this text box to the right side under the legend?

enter image description here

Have looked at matplotlib plot bar and line charts together, Pandas plot bar chart over line it didn't cover what I wanted I think.

Datasets:

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
Answer

I have done this using plotly. I have modified the Deaths to increase the value so that the line graph is seen.

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 npdf = 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()

Diagram: enter image description here

Using pandas plotting

import pandas as pd
import matplotlib.pyplot as pltdf = 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

Update: To use Date as index

import pandas as pd
import matplotlib.pyplot as pltdf = 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")

Dataframe with Date as index. Plotting this will give the same plot as above.

            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
https://en.xdnf.cn/q/118357.html

Related Q&A

How to trim spaces between list elements in an f-string? [duplicate]

This question already has answers here:Print all items in a list with a delimiter(8 answers)Closed 2 months ago.I have a string I am formatting and printing lists using f-string and I need to eliminate…

Keeping name and score together while sorting

so I need to sort some high scores into order and here is the code I already have:def sortscores():namelist = []scorelist = []hs = open("hst.txt", "r")hscounter = 0for line in hs:if…

How to put values of pandas dataframe into a for loop in python?

This is a part of a Python API Connection program Here is the DataFrame SampleRegion Sector Brand ID Start Date 7188 US 41 40000 2006-03-06 7189 US 41 40345 2017-11-06 …

Partition Array

Given an array nums of integers and an int k, partition the array (i.e move the elements in nums) such that: All elements < k are moved to the left. All elements >= k are moved to the right Retur…

Tensorflow model accuracy

My model which I have trained on a set of 29K images for 36 classes and validated on 7K images. The model has a training accuracy of 94.59% and validation accuracy of 95.72% It has been created for OCR…

python email.message_from_string() parse problems

My setup uses fetchmail to pull emails from Gmail, which are processed by procmail and passes it to a python script.When I use email.message_from_string(), the resulting object is not parsed as an emai…

Python: Function returning highest value in list without max()? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.Want to improve this question? Update the question so it focuses on one problem only by editing this post.Closed 7…

Given edges, how can find routes that consists of two edges in a vectorised way?

I have an array of towns and their neighbours. I want to get a set all the pairs of towns that have at least one route that consists of exactly two different edges. Is there a vectorized way to do this…

Usefulness of one-line statements in Python [closed]

Closed. This question is opinion-based. It is not currently accepting answers.Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.Clo…

Pack data into binary string in Python [closed]

Its difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying thi…