gpt4 book ai didi

python - 对数对数图中的寄生虫 x Axis

转载 作者:行者123 更新时间:2023-12-01 01:13:09 38 4
gpt4 key购买 nike

我有一个图表,其中 x Axis 是以 GeV 为单位的温度,但我还需要以开尔文为单位放置温度引用,因此我考虑放置一个以 K 为单位的寄生 Axis 。尝试遵循此回答How to add a second x-axis in matplotlib ,这是代码示例。我在图表顶部得到了第二个轴,但它不是我需要的 K 温度。

import numpy as np
import matplotlib.pyplot as plt

tt = np.logspace(-14,10,100)
yy = np.logspace(-10,-2,100)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

ax1.loglog(tt,yy)
ax1.set_xlabel('Temperature (GeV')

new_tick_locations = np.array([.2, .5, .9])

def tick_function(X):
V = X*1.16e13
return ["%.1f" % z for z in V]

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(new_tick_locations)
ax2.set_xticklabels(tick_function(ax1Xs))
ax2.set_xlabel('Temp (Kelvin)')
plt.show()

这是我运行代码时得到的结果。

对数对数图 loglog plot

我需要寄生 Axis 与原始 x Axis 成比例。当任何人看到图表时,都可以轻松读取开尔文温度。提前致谢。

最佳答案

通用解决方案可能如下所示。由于您有非线性标度,因此我们的想法是找到开尔文中的好刻度的位置,转换为 GeV,以 GeV 为单位设置位置,但以开尔文为单位标记它们。这听起来很复杂,但优点是您不需要自己找到刻度,只需依靠 matplotlib 来找到它们。但这需要两个尺度之间的函数依赖性,即 GeV 和开尔文之间的转换及其倒数。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

tt = np.logspace(-14,10,100)
yy = np.logspace(-10,-2,100)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

plt.setp([ax1,ax2], xscale="log", yscale="log")
ax1.get_shared_x_axes().join(ax1, ax2)

ax1.plot(tt,yy)

ax1.set_xlabel('Temperature (GeV)')
ax2.set_xlabel('Temp (Kelvin)')

fig.canvas.draw()

# 1 GeV == 1.16 × 10^13 Kelvin
Kelvin2GeV = lambda k: k / 1.16e13
GeV2Kelvin = lambda gev: gev * 1.16e13

loc = mticker.LogLocator()
locs = loc.tick_values(*GeV2Kelvin(np.array(ax1.get_xlim())))

ax2.set_xticks(Kelvin2GeV(locs))
ax2.set_xlim(ax1.get_xlim())

f = mticker.ScalarFormatter(useOffset=False, useMathText=True)
g = lambda x,pos : "${}$".format(f._formatSciNotation('%1.10e' % GeV2Kelvin(x)))
fmt = mticker.FuncFormatter(g)
ax2.xaxis.set_major_formatter(mticker.FuncFormatter(fmt))

plt.show()

enter image description here

关于python - 对数对数图中的寄生虫 x Axis ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640423/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com