matplotlib dataframe месяц обзор 2 наборов данных [даты, нечисловые данные] столбчатая диаграмма с накоплением, определяющая атрибуты - PullRequest
0 голосов
/ 19 июня 2020

Фон:

Мне удалось создать следующий график, но у меня возникли трудности с некоторыми элементами

Для чего это стоит:

По мере роста базы данных график будет иметь данные за 12 месяцев (ie 12 столбцов). Смысл этой диаграммы - дать помесячный сравнительный обзор операций A, B и C.

Заявление об ограничении ответственности:

Этот график ниже это то, чего я хочу достичь, однако я хотел бы интегрировать свои вопросы в график Если есть альтернатива получению составного графика со всеми датами, пожалуйста, поделитесь со мной кодом .

enter image description here

... and after 2 months of data the output will be

введите описание изображения здесь

Вопрос:

Как я могу определить следующее:

  • Сделайте y-axis целыми числами
  • Измените date format (на %m %Y) из x-axis
  • Определите размер диаграммы (400 by 800) (он немного мал, поскольку я думаю, что даты обрезаются)
  • Добавить заголовок this is my chart к диаграмме
  • Добавить метки (this is x axis, this is y-axis) к осям x и y?

MWE:

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

1 Ответ

1 голос
/ 22 июня 2020

Я добавил данные за июнь и нарисовал график; настройка отображения даты по оси 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))

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...