Несколько х меток на Pyplot - PullRequest
       15

Несколько х меток на Pyplot

0 голосов
/ 29 октября 2018

Ниже приведен мой код для линейного графика. Я хотел бы добавить еще одну метку x под текущую (чтобы я мог показывать дни недели).

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns;sns.set()

sns.set()

data = pd.read_csv("123.csv")

data['DAY']=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

plt.figure(figsize=(15,8))  
plt.plot('DAY','SWST',data=data,linewidth=2,color="k")
plt.plot('DAY','WMID',data=data,linewidth=2,color="m")

plt.xlabel('DAY', fontsize=20)
plt.ylabel('VOLUME', fontsize=20)
plt.legend()

Line Graph

РЕДАКТИРОВАТЬ: После изучения документации у меня есть 2 проблемы. Шкала была изменена с 31 на 16, и дни недели не совпадают с номером дня.

data['DAY']=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

tick_labels=['1','\n\nThu','2','\n\nFri','3','\n\nSat','4','\n\nSun','5','\n\nMon','6','\n\nTue','7','\n\nWed','8','\n\nThu','9','\n\nFri','10','\n\nSat','11','\n\nSun','12','\n\nMon','13','\n\nTue','14','\n\nWed','15','\n\nThu','16','\n\nFri','17','\n\nSat','18','\n\nSun','19','\n\nMon','20','\n\nTue','21','\n\nWed','22','\n\nThu','23','\n\nFri','24','\n\nSat','25','\n\nSun','26','\n\nMon','27','\n\nTue','28','\n\nWed','29','\n\nThu','30','\n\nFri','31','\n\nSat']
tick_locations = np.arange(31)

plt.figure(figsize=(15,8))

plt.xticks(tick_locations, tick_labels)
plt.plot('DAY','SWST',data=data,linewidth=2,color="k")
plt.plot('DAY','WMID',data=data,linewidth=2,color="m")     

plt.xlabel('DAY', fontsize=20)
plt.ylabel('VOLUME', fontsize=20)
plt.legend()

plt.show()

Line graph2

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Никогда не используйте ax.set_xticklabels, не устанавливая также расположение галочек. Это можно сделать через ax.set_xticks.

ax.set_xticks(...)
ax.set_xticklabels(...)

Конечно, вы можете сделать то же самое с pyplot

ax = plt.gca()
ax.set_xticks(...)
ax.set_xticklabels(...)
0 голосов
/ 29 октября 2018

Функция pyplot, которую вы ищете - plt.xticks(). По сути это комбинация ax.set_xticks() и ax.set_xticklabels()

Из документации :

Параметры:

галочки: array_like

Список позиций, на которых следует ставить галочки. Вы можете передать пустой список для отключения xticks.

ярлыки:

array_like, необязательный список явных меток для размещения в данном LOCS.

Вы бы хотели что-то вроде приведенного ниже кода. Обратите внимание, что вам, вероятно, следует явно установить расположение галочек, а также метки, чтобы избежать установки меток в неправильные позиции:

tick_labels = ['1','\n\nThu','2',..., '31','\n\nSat')
plt.xticks(tick_locations, tick_labels)

Обратите внимание, что объектно-ориентированный API (т. Е. С использованием ax.) допускает более настраиваемые графики.

Обновление

После редактирования я вижу, что метки, которые вы хотите перейти ниже, являются частью того же списка. Поэтому ваш список меток на самом деле имеет длину 62. Поэтому вам нужно объединить каждые 2 элемента вашего списка:

tick_labels=['1','\n\nThu','2','\n\nFri','3','\n\nSat','4','\n\nSun','5','\n\nMon','6','\n\nTue','7','\n\nWed','8',
             '\n\nThu','9','\n\nFri','10','\n\nSat','11','\n\nSun','12','\n\nMon','13','\n\nTue','14','\n\nWed','15',
             '\n\nThu','16','\n\nFri','17','\n\nSat','18','\n\nSun','19','\n\nMon','20','\n\nTue','21','\n\nWed','22',
             '\n\nThu','23','\n\nFri','24','\n\nSat','25','\n\nSun','26','\n\nMon','27','\n\nTue','28','\n\nWed','29',
             '\n\nThu','30','\n\nFri','31','\n\nSat']

tick_locations = np.arange(31)

new_labels = [ ''.join(x) for x in zip(tick_labels[0::2], tick_labels[1::2]) ]
plt.figure(figsize=(15, 8))

plt.xticks(tick_locations, new_labels)

plt.show()

enter image description here

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