Python matplotlibs устанавливает метки / метки по оси X по условию - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть сюжет:

enter image description here

И я хочу пометить эти метки / галочки на оси X, так что будет один только всякий раз, когдаконец или начало синего сегмента со значением

x / 266.6667

Таким образом, если мы посмотрим на начало синей линии в первый раз, значение x1500, поэтому я хочу добавить значение 15000 / 266.667 к оси х.В целом есть 4 синих сегмента, поэтому в оси X должно быть 8 тиков (по одному каждый раз, когда синий сегмент начинается или заканчивается)

Я нарисовал этот график, используя matplotlib:

import matplotlib.pyplot as plt

data = np.array(vec)
df = pd.DataFrame({'data': data}).reset_index()
df['colors'] = np.where(data < 1, 'red', 'blue')
plt.scatter(df['index'], df['data'], c=df['colors'])
plt.show()

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Разделите ваши данные на 266,6667, чтобы получить их в единицах, которые вы хотите.

x /= 266.6667

Затем найдите точки, которые вы хотите пометить, с помощью

ticks = x[:-1][np.diff((y > 1).astype(int)) > 0]

Полный пример:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,70000,23)
y = np.array([0,0,0,2,3,5,4,3,0,0,0,0,2,3,5,5,3,0,0,0,0,4,3])

x /= 266.6667


fig, ax= plt.subplots()
ax.scatter(x,y, c=(y > 1), cmap="bwr_r")

ticks = x[:-1][np.diff((y > 1).astype(int)) > 0]
ax.set_xticks(ticks)

plt.show()

enter image description here

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