python - pyplot : add specific additional ticks and labels on right side with same scale

标签 python matplotlib

我想在右侧为列表“all_values”中的值添加刻度和标签。我不想在左侧添加这些值,因为它会与 y 轴上的基本刻度重叠。我怎样才能添加这些值。 这是我的情节中的代码(我根据下面的评论更改了代码,更短且完全英文):

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

materials = {'42CrMo4 nitrocarburiert DNV': {'N_stat': 1e5, 'N_1': 1e5, 'N_D': 2e6, 'S_stat': 1240, 'S_1': 1240, 'S_D': 1030}}       

N_stat_values = []
S_stat_values = []
S_D_values = []

for material in materials:
    N = [1, materials[material]['N_stat'], materials[material]['N_1'], materials[material]['N_D'], 1e10]
    stress = [materials[material]['S_stat'], materials[material]['S_stat'], materials[material]['S_1'], materials[material]['S_D'], materials[material]['S_D']]
    N_stat_values.append(materials[material]['N_stat'])
    S_stat_values.append(materials[material]['S_stat'])
    S_D_values.append(materials[material]['S_D'])    
    plt.loglog(N, stress)

all_values = list(set(S_stat_values + S_D_values))

ax = plt.gca()
ax.yaxis.set_major_formatter(ScalarFormatter())
plt.yticks(np.arange(1000, 1400, 100))
plt.grid(True, which='major',linewidth=0.5)
plt.grid(True, which='minor', linestyle='--', linewidth=0.3)
plt.xlim(np.min(N_stat_values)/10, 1e10)

给出下图: first try

现在我想在 all_values 列表的右侧添加刻度线和标签。 我尝试遵循 ImportanceOfBeingErnest 的提示:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

materials = {'42CrMo4 nitrocarburiert DNV': {'N_stat': 1e5, 'N_1': 1e5, 'N_D': 2e6, 'S_stat': 1240, 'S_1': 1240, 'S_D': 1030}}       

N_stat_values = []
S_stat_values = []
S_D_values = []

for material in materials:
    N = [1, materials[material]['N_stat'], materials[material]['N_1'], materials[material]['N_D'], 1e10]
    stress = [materials[material]['S_stat'], materials[material]['S_stat'], materials[material]['S_1'], materials[material]['S_D'], materials[material]['S_D']]
    N_stat_values.append(materials[material]['N_stat'])
    S_stat_values.append(materials[material]['S_stat'])
    S_D_values.append(materials[material]['S_D'])    
    plt.loglog(N, stress)

all_values = list(set(S_stat_values + S_D_values))

ax = plt.gca()
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.set_yticks(np.arange(1000, 1400, 100))
ax2 = ax.twinx()
ax2.set_yscale('log')
ax2.yaxis.set_major_formatter(ScalarFormatter())
ax2.set_yticks(all_values)

plt.grid(True, which='major',linewidth=0.5)
plt.grid(True, which='minor', linestyle='--', linewidth=0.3)
plt.xlim(np.min(N_stat_values)/10, 1e10)

但我没有得到想要的结果,右侧的刻度线位置错误,并且 x 轴上的小刻度线消失了: Next try

最佳答案

通过最新的评论,我能够得到我想要的输出:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

materials = {'42CrMo4 nitrocarburiert DNV': {'N_stat': 1e5, 'N_1': 1e5, 'N_D': 2e6, 'S_stat': 1240, 'S_1': 1240, 'S_D': 1030}}       

N_stat_werte = []
S_stat_werte = []
S_D_werte = []

for material in materials:
    N = [1, materials[material]['N_stat'], materials[material]['N_1'], materials[material]['N_D'], 1e10]
    stress = [materials[material]['S_stat'], materials[material]['S_stat'], materials[material]['S_1'], materials[material]['S_D'], materials[material]['S_D']]
    N_stat_values.append(materials[material]['N_stat'])
    S_stat_values.append(materials[material]['S_stat'])
    S_D_values.append(materials[material]['S_D'])    
    plt.loglog(N, stress)

all_values = list(set(S_stat_values + S_D_values))

ax = plt.gca()
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.set_ylim(1000, 1300)
ax.set_yticks(np.arange(1000, 1400, 100))
ax.grid(True, which='major',linewidth=0.5)
ax.grid(True, which='minor', linestyle='--', linewidth=0.3)

ax2 = ax.twinx()
ax2.set_yscale('log')
ax2.yaxis.set_major_formatter(ScalarFormatter())
ax2.set_yticks(all_values)
ax2.set_ylim(1000, 1300)
ax2.grid(True, which='major',linewidth=0.5)
plt.xlim(np.min(N_stat_values)/10, 1e10)
plt.show()

它看起来像这样: final result

关于python - pyplot : add specific additional ticks and labels on right side with same scale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597524/

相关文章:

python - Pool.map 与 Pool.map_async

python - 如何将 RASA NLU 与 RASA CORE 一起使用

python - Google Cloud Run 不加载 .env 文件

python - Matplotlib:在连接到寄生虫轴的数据上绘制数据标签

python - 在 2x2 网格中绘制形状图

python - 递归神经网络用于异常检测

python - 具有相同数据集的 Keras 中 fit() 和 evaluate() 的不同准确度

python - 如何从 Pandas 中的(纬度,经度,值)列表创建一个 2x2 数组?

python - pyplot.scatter : How does one set color of points from low --> high?

python - 如何在 matplotlib 中调整框轴的大小