Добавить строку к оси x целых чисел

Я строю график по оси x (концентрация раствора) в зависимости от эффективности (y). Я настроил это для отображения x от 0 до 100, но я хочу добавить еще одну точку данных в качестве элемента управления без какого-либо решения. У меня проблемы, так как это никуда не вписывается на оси концентрации, но я хотел бы добавить его либо до 0, либо после 100, возможно, с разрывом оси, чтобы разделить их. Таким образом, моя ось X будет выглядеть как ['control', 0, 20, 40, 60, 80, 100]

MWE:

x_array = ['control', 0, 20, 40, 50, 100]
y_array = [1, 2, 3, 4, 5, 6]
plt.plot(x_array, y_array)

Пытаясь это, я получаю сообщение об ошибке:

ValueError: не удалось преобразовать строку в число с плавающей запятой: «контроль»

Любые идеи, как я мог бы сделать что-то вроде этой работы? Я посмотрел на xticks, но это нанесло бы ось x в виде строк, что привело бы к потере непрерывности оси, что испортило бы график, поскольку точки данных не расположены на равном расстоянии друг от друга.


person Tom S    schedule 06.09.2017    source источник


Ответы (1)


Вы можете добавить одну точку на график как отдельный вызов plot, а затем настроить метки оси x.

import matplotlib.pyplot as plt

x_array = [0, 20, 40, 50, 100]
y_array = [2, 3, 4, 5, 6]
x_con = -20
y_con = 1
x_ticks = [-20, 0, 20, 40, 60, 80, 100]
x_labels = ['control', 0, 20, 40, 60, 80, 100]

fig, ax = plt.subplots(1,1)
ax.plot(x_array, y_array)
ax.plot(x_con, y_con, 'ro')  # add a single red dot

# set tick positions, adjust label text
ax.xaxis.set_ticks(x_ticks)
ax.xaxis.set_ticklabels(x_labels)
ax.set_xlim(x_con-10, max(x_array)+3)
ax.set_ylim(0,7)
plt.show()

введите здесь описание изображения

person James    schedule 06.09.2017