Pyplot: добавьте определенные дополнительные галочки и метки на правой стороне с тем же масштабом - PullRequest
0 голосов
/ 03 декабря 2018

Я бы хотел добавить галочки и метки справа для значений в списке "all_values".Я не хочу добавлять эти значения слева, потому что тогда они перекрывают мои основные тики на яси.Как я могу добавить эти значения.Вот код из моего сюжета (я изменил код в соответствии с комментарием ниже, более короткий и полностью английский):

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)

дает следующий рисунок: первая попытка

Теперь я хочу добавить галочки и метки справа от списка 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 пропали: След.попробуйте

1 Ответ

0 голосов
/ 04 декабря 2018

С последним комментарием я смог получить желаемый результат:

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()

Это выглядит так: окончательный результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...