Matplotlib max ticks показывает первые несколько тиков - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь построить временной ряд за ~ 100 дней.Чтобы улучшить читаемость, я хочу ограничить количество отметок оси X.Однако и plt.locator_params(axis='x', nbins=6), и ax.xaxis.set_major_locator(plt.MaxNLocator(10)) просто показывают первые несколько тиков, а не каждый n-тик.График ниже должен иметь тики, равномерно распределенные между 05-23 и 07-21 (60 интервалов), а не 6 тиков, начинающиеся с 05-23

plt.stackplot(df.iloc[:,0], df.iloc[:, 1])
plt.legend(loc='upper left')
plt.xlabel("This axis actually goes from 05-23 to 07-21")
plt.locator_params(axis='x', nbins=6)

Resulting plot

Используемый фрейм данных

 id   month-day  result
0    05 - 23      78
1    05 - 24     154
2    05 - 25     138
3    05 - 26     176
4    05 - 27     142
5    05 - 28     122
6    05 - 29     199
7    05 - 30     202
8    05 - 31     194
9    06 - 01     166
10   06 - 02     141
11   06 - 03     136
12   06 - 04     108
13   06 - 05     149
14   06 - 06     168
15   06 - 07     182
16   06 - 08     192
17   06 - 09     147
18   06 - 10     133
19   06 - 11     109
20   06 - 12     115
21   06 - 13     124
22   06 - 14     172
23   06 - 15     204
24   06 - 16     131
25   06 - 17     145
26   06 - 18     128
27   06 - 19     179
28   06 - 20     170
29   06 - 21     385
30   06 - 22     427
31   06 - 23     404
32   06 - 24     471
33   06 - 25     334
34   06 - 26     557
35   06 - 27     291
36   06 - 28     337
37   06 - 29     718
38   06 - 30     658
39   07 - 01     524
40   07 - 02     406
41   07 - 03     744
42   07 - 04     941
43   07 - 05     919
44   07 - 06     855
45   07 - 07     740
46   07 - 08     612
47   07 - 09     592
48   07 - 10     797
49   07 - 11     804
50   07 - 12    1072
51   07 - 13    1141
52   07 - 14    1028
53   07 - 15     841
54   07 - 16     822
55   07 - 17    1157
56   07 - 18    1356
57   07 - 19    1031
58   07 - 20    1068
59   07 - 21     992

1 Ответ

0 голосов
/ 27 августа 2018

Основная проблема заключается в том, что у создаваемой вами диаграммы есть FixedLocator и FixedFormatter.Замена только локатора, но сохранение фиксированного форматера приведет к бесполезным результатам.

Поскольку вы здесь работаете с датами, имеет смысл использовать даты на графике.Затем вы можете использовать локатор и форматер из matplotlib.dates.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates

df = pd.read_csv("data/month-day-data.txt", sep="\s\s+", engine="python")
df["month-day"] = pd.to_datetime(df["month-day"], format="%m - %d")

plt.stackplot(matplotlib.dates.date2num(df["month-day"]), df["result"])
plt.xlabel("This axis actually goes from 05-23 to 07-21")

plt.gca().xaxis.set_major_locator(matplotlib.dates.AutoDateLocator())
plt.gca().xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%m - %d"))
plt.show()

enter image description here

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