klu*_*onk 3 python plot matplotlib
我正在尝试将 matplotlib 中的不同绘图设置结合在一起。我在 matplotlib 示例库/文档和堆栈中找到了每个示例的很好的示例,但我找不到有关我的具体问题的任何内容。
\n\n所以到目前为止我所知道的是,如何添加一个或多个具有偏移 y 轴的轴,以便通过使用ax.twinx(). 在示例寄生轴演示中,第三个 y 轴称为寄生轴。但是,如果您想添加一个附加轴(该轴只是现有轴的缩放版本),则可以使用,如辅助轴演示中所示。没有其他数据可供绘制。ax.secondary_yaxis()
到目前为止,我无法实现的是与原始 y 轴偏移的辅助 y 轴。这对于使图表在科学界更具可读性非常有帮助。例如,虽然一些科学家使用频率作为电磁频谱的参考,但其他科学家则使用波长或波数。Afsar [1] 使用了一种非常方便的轴标签,其中在同一图中包含所有三个变量:
\n\n\n\n我想要类似的东西,只是在 y 轴而不是 x 轴上。有没有办法使次轴与主轴偏移?我尝试了一些参数但无法弄清楚。
\n\n感谢您的任何帮助!
\n\n[1] 穆罕默德·努鲁尔·阿夫萨。\xe2\x80\x9c常见聚合物的复折射率、复介电常数和损耗角正切的精密毫米波测量。\xe2\x80\x9d IEEE 仪器和测量汇刊 IM\xe2\x80\x9336,编号。2(1987 年 6 月):530\xe2\x80\x9336。https://doi.org/10.1109/TIM.1987.6312733。
\n\n[1]:
\n一个完整的例子。倒数第三行是相关的。
import matplotlib.pyplot as plt
import numpy as np
import datetime
dates = [datetime.datetime(2018, 1, 1) + datetime.timedelta(hours=k * 6)
for k in range(240)]
temperature = np.random.randn(len(dates)) * 4 + 6.7
fig, ax = plt.subplots(constrained_layout=True)
ax.plot(dates, temperature)
ax.set_ylabel(r'$T\ [^oC]$')
plt.xticks(rotation=70)
def date2yday(x):
"""Convert matplotlib datenum to days since 2018-01-01."""
y = x - mdates.date2num(datetime.datetime(2018, 1, 1))
return y
def yday2date(x):
"""Return a matplotlib datenum for *x* days after 2018-01-01."""
y = x + mdates.date2num(datetime.datetime(2018, 1, 1))
return y
secax_x = ax.secondary_xaxis('top', functions=(date2yday, yday2date))
secax_x.set_xlabel('yday [2018]')
def celsius_to_fahrenheit(x):
return x * 1.8 + 32
def fahrenheit_to_celsius(x):
return (x - 32) / 1.8
secax_y = ax.secondary_yaxis(
'right', functions=(celsius_to_fahrenheit, fahrenheit_to_celsius))
secax_y.set_ylabel(r'$T\ [^oF]$')
def celsius_to_anomaly(x):
return (x - np.mean(temperature))
def anomaly_to_celsius(x):
return (x + np.mean(temperature))
# document use of a float for the position:
secax_y2 = ax.secondary_yaxis(
1.2, functions=(celsius_to_anomaly, anomaly_to_celsius))
secax_y2.set_ylabel(r'$T - \overline{T}\ [^oC]$')
plt.show()
Run Code Online (Sandbox Code Playgroud)