#python #matplotlib #plot #regression #scatter-plot
#питон #matplotlib #сюжет #регрессия #точечный график
Вопрос:
Я новичок, так что это может быть глупый вопрос. Если я выполню следующий код, мне будет показана диаграмма рассеяния x
и y
, но линия регрессии plt.plot(x, estimated_y, color="r", linewidth=3.0)
не отображается. Я оценил y
, используя ковариационную матрицу. x
, y
и estimated_y
все они являются массивами numpy. Если я бегу plt.plot(x, estimated_y, color="r", linewidth=3.0)
один, мне показывают пустую фигуру.
plt.figure()
plt.scatter(x,y)
plt.plot(x, estimated_y, color="r", linewidth=3.0)
plt.show()
plt.xlabel("x")
plt.ylabel("y")
Спасибо за всю помощь!
Комментарии:
1. Трудно сказать, что вы сделали, если вы не показываете весь код и набор данных. Для начала: вы уверены
estimated_y
, что данные содержатся и находятся в пределах указанной цифры?
Ответ №1:
Ваш код выглядит вполне нормально. Я добавил некоторые случайные данные, чтобы создать минимально воспроизводимый пример:
import matplotlib.pyplot as plt
# create dummy data
x = list(range(0,10))
y = list(range(10,0,-1))
estimated_y = [1]*10
plt.figure()
plt.scatter(x,y)
plt.plot(x, estimated_y, color="r", linewidth=3.0)
plt.show()
# do not add anything to the axes after this command. The command forces to terminate the "rendering", which is why everything afterwards opens a new plot
Однако вы можете убедиться, что строите график по одним и тем же осям (фигура может содержать несколько осей или «подзаголовков»), используя
# open a figure create a single axis
fig, ax = plt.subplots()
ax.scatter(x,y)
ax.plot(x, estimated_y, color="r", linewidth=3.0)
plt.show()
Любая функция построения графика, которую вы вызываете из базы, например matplotlib.pyplot.plot()
, или plt.plot()
поскольку вы переименовали / импортировали часть библиотеки as plt
, будет отображаться на оси, которая в данный момент активна. Это должно сработать в вашем случае.
Хорошо, что при работе с осями вы можете подсчитать количество линий, которые были нанесены на них: len(ax.get_lines())
1
Он один, потому scatter()
что отображает не «линии», а «точки»… Теперь, если вы вызовете его со своими данными, он также должен вернуться 1
. Если это так, и вы не видите красную линию, возможно, ваши данные содержат NaN
s или они были нанесены за пределы. Если он возвращается 0
, вы нанесли его на какую-то другую (возможно, невидимую или еще не нарисованную) ось.
Комментарии:
1. Спасибо за ваш комментарий. Это все еще не работает странно. На самом деле, я пытался использовать ваш вариант с подзаголовком, и теперь он говорит мне, что на графике есть 20 строк, если я попрошу len(ax.get_lines()). Вероятно, причина этого: мой numpy-массив estimated_y содержит 20 чисел.
2. хм, я сомневаюсь в этом. Вы могли бы проверить эту гипотезу, вызвав
ax.plot(x, estimated_y.tolist())