Показывать только целые числа в метках Matplotlib по оси X - PullRequest
0 голосов
/ 13 апреля 2020

Новичок в matplotlib и создал простую линейную диаграмму из набора данных, построенного в принципе так, как показано ниже. Мы назовем этот фрейм данных «cardata»

|------- |--------|------------|---------|
|   id   | year   |  some_var  |  count  |                                               
---------|--------|------------|---------|
|   1    |  2016  |     car    |    1    |                                      
|   2    |  2016  |     car    |    1    |  
|   3    |  2017  |     car    |    1    |   
|   4    |  2017  |     car    |    1    |   
|   5    |  2018  |     car    |    1    |                                      
|   6    |  2018  |     car    |    1    |  
|   7    |  2018  |     car    |    1    |   
|   8    |  2019  |     car    |    1    | 
|   9    |  2019  |     car    |    1    | 
|  10    |  2020  |     car    |    1    | 

I wi sh, чтобы агрегировать подсчеты по годам, чтобы я мог видеть, сколько раз «машина» происходит в год.

Я добился этого, используя следующий код

cardata.groupby(['year']).count()['some_var'].plot()

Это дает мне график, который я могу использовать, однако ось X выглядит следующим образом ...

| 2016 | 2016.5 | 2017 | 2017.5 | 2018 | 2018.5 | etc etc 

Вопрос 1) Как Могу ли я установить метки / отметки x-asxis для отображения только целых чисел за год?

Вопрос 2) Как бы я исключил, например, год '2020' из графика?

Спасибо заранее.

1 Ответ

2 голосов
/ 13 апреля 2020

логическое индексирование, групповая обработка и построение с параметрами xticks:

g = df[df['year'] != 2020].groupby('year').count()['some_var']
g.plot(xticks=g.index)

Одним из способов построения меток является использование matplotlib и понимание списка. Удар кода будет отображать значение y, но оно может быть любым:

import matplotlib.pyplot as plt
g = df[df['year'] != 2020].groupby('year').count()['some_var']

g.plot(xticks=g.index)

[plt.annotate(y, (x,y), textcoords="offset points",
              xytext=(0,10), ha='center') for x,y in list(zip(g.index, g))]

enter image description here

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