Python matplotlib dataframe 2个数据集的月份概览[日期,非数字数据]堆叠条形图定义属性
背景:Python matplotlib dataframe 2个数据集的月份概览[日期,非数字数据]堆叠条形图定义属性,python,matplotlib,Python,Matplotlib,背景: import datetime as dt import mysql.connector import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime mycursor.execute(query) data = mycursor.fetchall() df = pd.DataFrame(data, columns=['date', 'Oper
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
我已经成功地创建了下面的图表,但是我在处理一些元素时遇到了困难
为了它的价值:
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
随着数据库的增长,图形最终将有12个月的数据(即12条)。本图表的重点是提供运营a、B和C的月度对比概览
免责声明:
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
下面的图表是我想要实现的,但是我想将我的问题整合到图表中如果有其他方法可以获得包含所有日期的堆叠图表,请与我免费共享代码
。。。在2个月的数据之后,输出将是
问题:
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
我如何定义以下内容:
date Operation
2020-05-07 A
2020-05-08 B
2020-05-08 A
2020-05-12 A
2020-05-12 A
2020-05-12 B
2020-05-13 C
2020-05-13 A
2020-05-13 B
2020-05-14 A
2020-05-19 B
2020-05-21 A
2020-05-25 A
2020-05-26 B
2020-05-26 C
2020-05-26 A
2020-05-26 A
2020-05-29 A
- 将y轴设置为整数
- 更改
x轴的
(更改为日期格式
)%m%Y
- 定义图表大小(
)(它有点小,因为我认为日期被切断了)400 x 800
- 添加一个
标题这是我的图表
- 是否将标签(
,这是x轴
)添加到x&y轴这是y轴
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
数据集:
import datetime as dt
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
mycursor.execute(query)
data = mycursor.fetchall()
df = pd.DataFrame(data, columns=['date', 'Operation'])
df.date = pd.to_datetime(df.date)
pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
plt.savefig(CURRENT_DIRECTORY + filename)
print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))
print(df)
产生以下结果:
date Operation
2020-05-07 A
2020-05-08 B
2020-05-08 A
2020-05-12 A
2020-05-12 A
2020-05-12 B
2020-05-13 C
2020-05-13 A
2020-05-13 B
2020-05-14 A
2020-05-19 B
2020-05-21 A
2020-05-25 A
2020-05-26 B
2020-05-26 C
2020-05-26 A
2020-05-26 A
2020-05-29 A
我添加了6月份的数据并绘制了一张图表;x轴上日期显示的自定义是自动设置的。我想这样做,但没有成功,所以我创建了一个显示字符串并进行了设置
import datetime as dt
# import mysql.connector
import pandas as pd
import numpy as np
import io
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
import datetime
COLOR_LIST = ['red','blue','orange']
# mycursor.execute(query)
# data = mycursor.fetchall()
data ='''
date Operation
2020-05-07 A
2020-05-08 B
2020-05-08 A
2020-05-12 A
2020-05-12 A
2020-05-12 B
2020-05-13 C
2020-05-13 A
2020-05-13 B
2020-05-14 A
2020-05-19 B
2020-05-21 A
2020-05-25 A
2020-05-26 B
2020-05-26 C
2020-05-26 A
2020-05-26 A
2020-05-29 A
2020-05-30 B
2020-05-31 C
2020-06-01 A
2020-06-02 A
2020-06-03 C
2020-06-04 B
2020-06-05 C
2020-06-06 C
2020-06-07 A
2020-06-08 A
2020-06-09 C
'''
# df = pd.DataFrame(data, columns=['date', 'Operation'])
df = pd.read_csv(io.StringIO(data), sep='\s+')
df.date = pd.to_datetime(df.date)
ax = pd.crosstab(df.date.dt.to_period('M'),df.Operation).plot.bar(stacked=True, color=COLOR_LIST)
today = dt.date.today()
# Define the chart size (400 by 800)
fig = plt.figure(figsize=(4,8), dpi=100)
# Add a this is my chart title to the chart
ax.set_title('this is my chart')
# Add labels (this is x axis, this is y-axis)
ax.set_xlabel('this is x-axis')
ax.set_ylabel('this is y-axis')
# Make the y-axis integers(by 2 interval)
start, end = ax.get_ylim()
ax.yaxis.set_ticks(np.arange(start, end, 2))
# Change the date format (to %m %Y ) of the x-axis
labels = ['05 20', '06 20']
ax.xaxis.set_major_formatter(ticker.FixedFormatter(labels))
# filename = "\\annual_{}.png".format(today.strftime("%b_%Y")).lower()
# plt.savefig(CURRENT_DIRECTORY + filename)
# print("\n\nGenerated: {}".format(CURRENT_DIRECTORY + filename))