scatterplot с xerr и yerr с matplotlib
Я ищу, чтобы визуализировать позиции двух массивов друг с другом. Мой стол выглядит так
Number Description value_1 value_2 err_1 err_2
1 descript_1 124.46 124.46 22.55 54.2
2 Descript_2 8.20 50.2 0.37 0.1
3 Descript_2 52.55 78.3 3.77 2.41
4 Descript_2 4.33 778.8 0.14 1.78
то, что я в основном хочу, это что-то вроде этого:
таким образом, на этом графике каждая точка имеет в основном три свойства: 1. xerror bar 2. yerror bar 3. описание того, что представляет эта точка.
У меня такое чувство, что это можно сделать элегантно с matplotlib, и пока я пробовал некоторые вещи с errorbars, которые не совсем дали мне то, что я ожидал. И я еще не выяснил, как разместить подписи к сюжету.
2 ответов
похоже, вы хотите что-то вроде этого?
import matplotlib.pyplot as plt
x = [124.46, 8.20, 52.55, 4.33]
y = [124.46, 50.2, 78.3, 778.8]
xerr = [54.2, 0.1, 2.41, 1.78]
yerr = [22.55, 0.37, 3.77, 0.14]
descrip = ['Atom 1', 'Atom 2', 'Atom 3', 'Atom 4']
plt.errorbar(x, y, xerr, yerr, capsize=0, ls='none', color='black',
elinewidth=2)
for xpos, ypos, name in zip(x, y, descrip):
plt.annotate(name, (xpos, ypos), xytext=(8, 8), va='bottom',
textcoords='offset points')
plt.show()
errorbar
работает так же, как plot
. Если вы хотите" разброс " сюжет, то вам нужно указать linestyle='none'
(или ls='none'
). Основываясь на вашем рисунке, вы не хотите шапки на errorbars, поэтому я указал capsize=0
. Аналогично, вы, похоже, хотите довольно толстые линии для errorbars, таким образом elinewidth=2
.
если вы хотите маркер в дополнение к errorbars, просто укажите marker='o'
(или любой стиль маркера вы хотели бы) к errorbar
.
annotate
это самый простой способ аннотировать точки На графике. Здесь я указал, что аннотация должна быть размещена 8 точки выше и справа от каждого измерения.
не
import matplotlib.pyplot as plt
x = [100, 200, 300, 400]
y = [100, 200, 300, 400]
xerr = [100, 100, 100, 100]
yerr = [20, 20, 20, 20]
plt.errorbar(x, y, xerr, yerr, ls='none')
plt.show()
имею в виду бары ошибка не в той оси?
matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt=u'', ecolor=None, elinewidth=None, capsize=3, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, hold=None, **kwargs)
обратите внимание, что yerr предшествует xerr, поэтому
plt.errorbar(x, y, xerr, yerr, ls='none')
делает ваши бары ошибок назад-yerr=xerr, xerr=yerr. Хорошее время для использования именованных args:
plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls='none')