Проблема с шириной столбцов в морской гистограмме

Я строю гистограмму морского происхождения в Python, однако ширина столбцов отличается, когда я рисую весь набор данных. Когда я рисую только начало набора данных, у меня нет проблем. Как это решить? Был бы признателен за любой совет!

Код для построения всего набора данных, только заголовка, и вывода заголовка кадра данных:

import numpy as np
import pandas as pd
import math
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.dates as md
import matplotlib.ticker as ticker
from datetime import datetime, timedelta

# create dataframes that will be used
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(310), freq='D')
np.random.seed(seed=1111)
data_a = np.random.randint(-20, high=30, size=len(days))
dataframe = pd.DataFrame({'date': days, 'a': data_a})
dataframe = dataframe.set_index('date')

dataframe_date = dataframe.copy()
dataframe_date = dataframe_date.reset_index()
dataframe_date['date'] = dataframe_date['date'].dt.date

dataframe_date_head = dataframe_date.head(20)

# plot whole dataframe
fig = plt.figure()
ax = plt.axes()

b_plot = sns.barplot(data = dataframe_date, x=dataframe_date['date'], y=dataframe_date['a'], ax=ax)
ax.xaxis.set_major_locator(ticker.AutoLocator())
ax.margins(x=0)
plt.xticks(rotation=70)

ax.set_xticks(np.arange(len(dataframe_date)))
ax.set_xticklabels(dataframe_date.date.apply(lambda x: str(x.day) + '-' + str(x.month) + '-' + str(x.year)))
ax.xaxis.set_major_locator(ticker.AutoLocator())

plt.show()

# plot only head(20) of the dataframe
fig = plt.figure()
ax1 = plt.axes()

b_plot = sns.barplot(data = dataframe_date_head, x=dataframe_date_head['date'], y=dataframe_date_head['a'], ax=ax1)
ax1.xaxis.set_major_locator(ticker.AutoLocator())
ax1.margins(x=0)
plt.xticks(rotation=70)

ax1.set_xticks(np.arange(len(dataframe_date_head)))
ax1.set_xticklabels(dataframe_date_head.date.apply(lambda x: str(x.day) + '-' + str(x.month) + '-' + str(x.year)))
ax1.xaxis.set_major_locator(ticker.AutoLocator())

plt.show()

# print head of the dataframe
dataframe_date_head

Проблема с шириной столбцов в морской гистограмме

Проблема с шириной столбцов в морской гистограмме

    date        a
0   2022-03-16  8
1   2022-03-17  17
2   2022-03-18  -3
3   2022-03-19  -8
4   2022-03-20  14
5   2022-03-21  4
6   2022-03-22  2
7   2022-03-23  0
8   2022-03-24  -9
9   2022-03-25  -6
10  2022-03-26  -12
11  2022-03-27  18
12  2022-03-28  -8
13  2022-03-29  26
14  2022-03-30  2
15  2022-03-31  -12
16  2022-04-01  21
17  2022-04-02  22
18  2022-04-03  -8
19  2022-04-04  10

Редактировать: Думаю, это как-то связано с моей средой (я использую Jupyter Notebook на Microsoft Edge)

Вот вывод с использованием следующего кода, предложенного для bar_plot:

b_plot = sns.barplot(data = dataframe_date, x=dataframe_date['date'], y=dataframe_date['a'], ax=ax, color = 'blue', ec='blue', lw=0.5)

Проблема с шириной столбцов в морской гистограмме

пожалуйста, предоставьте образец данных как текст, а не изображение

mozway 16.03.2022 15:49

Я отредактировал, чтобы у вас также были данные в виде текста. Это также в коде, который я предоставил

galaxy_d 16.03.2022 16:04

@JohanC да, к сожалению, он дает тот же график

galaxy_d 16.03.2022 18:18

ХОРОШО. Цвет края по умолчанию — «нет», поэтому изменение ширины линии не будет видно. Может sns.barplot(..., ec='white', lw=0.5)? Или sns.barplot(..., color='skyblue', ec='skyblue', lw=0.5)?

JohanC 16.03.2022 19:14

@JohanC спасибо за предложение - я думал, что это сработает ... но, как ни странно, полосы все еще немного отличаются по ширине. Я отредактировал свой вопрос, чтобы показать, что я имею в виду

galaxy_d 16.03.2022 20:40

Когда ширина полос близка к одному пикселю, неизбежно будут видны небольшие различия. Вы можете либо попробовать рисовать меньше полос, либо увеличить размер фигуры, либо (при сохранении графика в файл) увеличить dpi. См., например. что происходит с буквой m в этом Статья в Википедии о растеризации шрифтов

JohanC 16.03.2022 21:16

@JohanC Спасибо за предложение по увеличению dpi, оно сработало для меня. Не могли бы вы опубликовать ответ, чтобы я мог закрыть вопрос?

galaxy_d 24.03.2022 18:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно предложению в комментариях, ответ увеличивал dpi при сохранении сюжета.

Другие вопросы по теме