Я пытался настроить вторичные оси «y» и «x» на заполненном контурном графике, используя matplotlib . Моя цель состоит в том, чтобы иметь дополнительную ось «x» и «y», так что оба являются функцией значений их основных осей. Чтобы заставить его работать, я играл с Secondary_yaxis и Secondary_xaxis . Я запутался, как эти функции действительно работают. Фактические функции и данные разные, но вот код, с которым я играл, чтобы понять, что происходит: < /p>
import matplotlib.pyplot as plt
import numpy as np
# the function that I'm going to plot
def z_func(x, y):
return (1 - (x ** 2 + y ** 3)) * np.exp(-(x ** 2 + y ** 2) / 2)
yMax = 2.5
yMin = 1
xMax = yMax
xMin = yMin
x = np.arange(yMin, yMax, 0.01)
y = np.arange(xMin, xMax, 0.01)
X, Y = np.meshgrid(x, y) # grid of point
Z = z_func(X, Y) # evaluation of the function on the grid
fig,ax = plt.subplots()
ctr = ax.contourf( X,Y, Z)
xticks=np.linspace(xMin,xMax,9)
xtickLabels = [fr'{i:.1f}' for i in xticks]
ax.set_xticks(ticks=xticks, labels=xtickLabels)
ax.set_xlabel('x')
yticks = np.linspace( yMin,yMax, 9)
ytickLabels = [fr'{i:.1f}' for i in yticks]
ax.set_yticks(ticks=yticks, labels=ytickLabels)
ax.set_ylabel('y')
cbar = fig.colorbar(ctr, ax=ax, location='right')
cbar.ax.set_ylabel(r'$z=f(x,y)$')
Y = yticks**2
fig.subplots_adjust(left=0.20)
def y_forward(y):
return 1/y
# def forward(y):
# return 1/y
# def inverse(y):
# return y
secay=ax.secondary_yaxis('left', functions=(y_forward,y_forward))
secay.spines['left'].set_position(('outward', 40))
secay.set_ylabel(r'Y=1/y')
secay.yaxis.set_inverted(True)
fig.subplots_adjust(bottom=0.27)
def x_forward(x):
return 3*x
secax=ax.secondary_xaxis('bottom', functions=(x_forward,x_forward))
secax.spines['bottom'].set_position(('outward', 30))
secax.set_xlabel(r'X=3$\times$ x')
ax.grid(visible=False)
ax.set_title(r'$z=(1-x^2+y^3) e^{-(x^2+y^2)/2}$')
fig.tight_layout()
plt.show()
Я думаю, что вторичный_иксис и второй_XAXIS генерирует свои собственные масштабы, основанные на функциях преобразования. Я бы хотел, чтобы каждый тик на вторичных осях был линейно распределенным. Например, если первичная ось Y имеет 9 значений клещей, я хочу, чтобы вторичная ось Y также имела 9 значений клещей, каждая из которых вычисляется по пользовательской функции, применяемой к основным значениям оси Y. Кроме того, я хочу, чтобы эти клещи и значения были должным образом выровнены, так что значения вторичной оси можно легко идентифицировать с соответствующими значениями на первичной оси. Можно ли сделать что -то подобное с помощью функций Secondary_yaxis и secondary_xaxis ? Возможно, Twinx и Twiny были бы полезны?
Я пытался настроить вторичные оси «y» и «x» на заполненном контурном графике, используя matplotlib . Моя цель состоит в том, чтобы иметь дополнительную ось «x» и «y», так что оба являются функцией значений их основных осей. Чтобы заставить его работать, я играл с Secondary_yaxis и Secondary_xaxis . Я запутался, как эти функции действительно работают. Фактические функции и данные разные, но вот код, с которым я играл, чтобы понять, что происходит: < /p> [code]import matplotlib.pyplot as plt import numpy as np
# the function that I'm going to plot def z_func(x, y): return (1 - (x ** 2 + y ** 3)) * np.exp(-(x ** 2 + y ** 2) / 2)
yMax = 2.5 yMin = 1 xMax = yMax xMin = yMin
x = np.arange(yMin, yMax, 0.01) y = np.arange(xMin, xMax, 0.01) X, Y = np.meshgrid(x, y) # grid of point Z = z_func(X, Y) # evaluation of the function on the grid
fig,ax = plt.subplots()
ctr = ax.contourf( X,Y, Z)
xticks=np.linspace(xMin,xMax,9) xtickLabels = [fr'{i:.1f}' for i in xticks] ax.set_xticks(ticks=xticks, labels=xtickLabels) ax.set_xlabel('x')
yticks = np.linspace( yMin,yMax, 9) ytickLabels = [fr'{i:.1f}' for i in yticks] ax.set_yticks(ticks=yticks, labels=ytickLabels) ax.set_ylabel('y')
Я думаю, что вторичный_иксис и второй_XAXIS генерирует свои собственные масштабы, основанные на функциях преобразования. Я бы хотел, чтобы каждый тик на вторичных осях был линейно распределенным. Например, если первичная ось Y имеет 9 значений клещей, я хочу, чтобы вторичная ось Y также имела 9 значений клещей, каждая из которых вычисляется по пользовательской функции, применяемой к основным значениям оси Y. Кроме того, я хочу, чтобы эти клещи и значения были должным образом выровнены, так что значения вторичной оси можно легко идентифицировать с соответствующими значениями на первичной оси. Можно ли сделать что -то подобное с помощью функций Secondary_yaxis и secondary_xaxis ? Возможно, Twinx и Twiny были бы полезны?
Я пытался настроить вторичные оси «y» и «x» на заполненном контурном графике, используя matplotlib . Моя цель состоит в том, чтобы иметь дополнительную ось «x» и «y», так что оба являются функцией значений их основных осей. Чтобы заставить его...
Я пытаюсь нарисовать вторичную ось Y на диаграмме, похожей на то, что они называют диаграммой Парето
Ожидаемая диаграмма
Я не могу найти способ понять это. Я пытался выполнить поиск по документации и демонстрационным примерам в репозитории Gihub, но...
Как можно положить вторичную y оси y в диаграмму с основной линейной осью Y?import numpy as np
import bokeh as b
import bokeh.io
from bokeh.models.formatters import *
from bokeh.plotting import figure, show, output_file
from bokeh.models import...
Я пытаюсь привлечь вторичную оси y на таблицу, так же, как они называли Pareto Chart
ожидаемый диаграмму
Я не могу найти способ выяснить это. Я попытался искать в документации и на демо -примерах в репо Гихуб, но не нашел никакой помощи
, но...