Уровень переупорядочения Python во фрейме данных для пошагового графика - PullRequest
2 голосов
/ 11 апреля 2019

Я построил пошаговый график, и порядок тиков у не тот, который я хочу. Как я могу изменить их порядок?

Вот коды:

import numpy as np
import matplotlib.pyplot as plt
df = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
dat = pd.DataFrame(data = df)
plt.step(dat['col1'], dat['col2'])
plt.show()

Это сюжет, который я получил:

enter image description here

Но я хочу, чтобы тик у был [b, c, a], а не [a, b, c]. Как я могу это сделать?

Спасибо,

LT

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

К сожалению, в настоящее время matplotlib не позволяет заранее определять порядок категорий на оси.Один из вариантов, однако, заключается в том, чтобы сначала нанести что-то в правильном порядке на оси, а затем удалить это.Это исправит порядок последующего реального построения.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

order = list("bca")

dic = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
df = pd.DataFrame(dic)

sentinel, = plt.plot(np.repeat(df.col1.values[0], len(order)), order)
sentinel.remove()

plt.step(df['col1'], df['col2'])
plt.show()

enter image description here

1 голос
/ 11 апреля 2019

Вы можете использовать смесь pd.Series как mapper и ax.set_yticks:

import numpy as np
import matplotlib.pyplot as plt
df = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
dat = pd.DataFrame(data = df)

# Create a mapper from character to rank with the desired order:
order = ['b', 'c', 'a']
rank = pd.Series(range(len(order)), index=order)

fig, ax = plt.subplots()
ax.step(dat['col1'], rank.loc[dat['col2']])
ax.set_yticks(rank.values);
ax.set_yticklabels(rank.index)

enter image description here

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