Построение пунктирной линии на графике log-log с использованием Python matplotlib
В настоящее время я пытаюсь разместить горизонтальную пунктирную линию на графике журнала, используя приведенный ниже код. K2H_HUBp [:, 1] и DivR - это два [1x6000] массива. Переменная none представляет собой массив [1x6000], полный единиц.
Суть этого графика показывает, как радиусы "картофеля" сравниваются с "сладким картофелем". Следовательно, если бы они были одинаковыми, все точки данных должны располагаться на этой строке y = 1.
plt.scatter(K2H_HUBp[:,1],DivR,s=2.5,alpha=0.15,c = '#A9A9A9')
plt.loglog(K2H_HUBp[:,1], ones, '--',dashes=(1, 1),linewidth=0.9,c='#3C323C')
plt.ylim((0.1,10))
plt.xlim((0.35,12))
ax = plt.gca()
ax.tick_params(which = 'both', direction = 'in',right='on',top='on')
ax.set_xscale('log')
ax.set_yscale('log')
plt.ylabel("Radius (Potatos/Sweet Potatos)")
plt.xlabel("Radius (Potatos)")
Я бы хотел, чтобы эти линии были одинаково пунктирными по сюжету. У меня проблема с получением этого графика здесь, где линии не одинаково разнесены.
Я ищу график, который будет очень похож на этот (да, это линейный график, и я работаю с графиком log-log)
Я попытался изменить параметры dashes() без удачи.
Заранее спасибо за ваше руководство.:)
2 ответа
Вы можете либо построить это с другим loglog
-сюжет или со стандартом plot
, Этот код дает вам то, что вы ищете?
import numpy as np
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(2, 1)
x = np.linspace(0.01, 10, 100)
y = x**5
ax1.loglog(x, y, '.')
ax1.plot([x[0], x[-1]], [y[0], y[-1]], '--', label='with plot')
ax1.legend()
ax2.loglog(x, y, '.')
ax2.loglog([x[0], x[-1]], [y[0], y[-1]], '--', label='with loglog')
ax2.legend()
fig.show()
# plt.show()
Получается, что в Pyplot есть изящная функция, называемая hlines. Эта функция просто рисует горизонтальную линию, используя следующие аргументы:
matplotlib.pyplot.hlines(y, xmin, xmax, colors='k', linestyles='solid', label='', hold=None, data=None, **kwargs)
В моем случае я полностью удалил код:
plt.loglog(K2H_HUBp[:,1], ones, '--',dashes=(1, 1),linewidth=0.9,c='#3C323C')
и заменили его на:
plt.hlines(1, 0.001, 20, linestyles='dashed',linewidth=0.9,colors='#3C323C')
построение линии a y = 1 от x 0,001 до x 20. Тогда я получу желаемый результат - этот график.
Спасибо за ваше руководство, и я надеюсь, что это поможет кому-то еще в будущем!