Измените метки x графика matplotlib на определенные слова, используя объект ax - PullRequest
0 голосов
/ 27 мая 2020

с учетом следующих данных:

mock_data_x = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]
mock_data_y = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
mock_data_val = [
    "a",
    "b",
    "c",
    "d",
    "e",
    "d",
    "e",
    "a",
    "b",
    "c",
    "d",
    "a",
    "b",
    "e",
    "c",
]
df_mock = pd.DataFrame(dict(x=mock_data_x, y=mock_data_y, v=mock_data_val,))

который выглядит как:

    x  y  v
0   1  1  a
1   1  2  b
2   1  3  c
3   1  4  d
4   1  5  e
5   2  1  d
6   2  2  e
7   2  3  a
8   2  4  b
9   2  5  c
10  3  1  d
11  3  2  a
12  3  3  b
13  3  4  e
14  3  5  c

Я могу создать следующий график:

fig, ax = plt.subplots(figsize=(8, 5))

x_axis_labels = ["one", "two", "three"]

values = df_mock["v"].unique()
for val in values:
    dt = df_mock[df_mock["v"].eq(val)]
    ax.scatter(dt["x"], dt["y"])
    ax.plot(dt["x"], dt["y"])

positions = [1, 2, 3]
labels = ["r", "q"]
_ = plt.xticks(positions, x_axis_labels)

Что выглядит как:

enter image description here

Я чувствую, что должна быть альтернатива строке

_ = plt.xticks(positions, x_axis_labels)

Что-то, что действительно использует ax объект, а не plt.

Я просмотрел dir(ax) и dir(ax.xaxis), и неясно, что я должен использовать для этого.

1 Ответ

1 голос
/ 27 мая 2020

Эквивалент для ax:

ax.set_xticks(positions)
ax.set_xticklabels(x_axis_labels)

, и вы получите практически тот же график.

Однако в этом случае вы можете просто использовать map и pandas 'функция построения:

maps = {p:v for p,v in zip(positions, x_axis_labels)}

fig, ax = plt.subplots(figsize=(8,5))
(df_mock.set_index(['x','v'])['y']
     .unstack()
     .rename(index=maps)
     .plot(marker='o', ax=ax)
)

Вывод:

enter image description here

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