Вопрос по matplotlib, python, numpy – Добавить слайдер в таблицу Matplotlib

2

У меня есть код matplotlib, который генерирует простую 2D-диаграмму. Я хочу добавить виджет слайдеров к нему для переменных hte и hre (которые являются массивами), чтобы значения hte и hre можно было увеличивать или уменьшать в интерактивном режиме. Есть ли способ (я уверен, что есть, потому что я виделчто-то как это на сайте Matplotlib, но я не могу интегрировать его с моим кодом)? Любая помощь будет оценена. Вот код:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
from pylab import *

hte=np.array([10,11,12,13,15,20,21,22,25,30])
hre=np.array([1,2,3,4,5,6,7,8,9,10])

k=20*hte
n4=10*hre
t=6
w4=25

x=arange(1,100,10)
d=(log(x)/log(10))/10
y= k + n4 * (d) + t + w4 + 8

matplotlib.pyplot.jet()
lines=plot(x,y)
setp(lines, linewidth=2, color='r')
xlabel('X - Title')
ylabel('Y - title')
title('$Our Chart$')
grid(True)
show()

here is the chart that it generates

@joaquin, не могли бы вы помочь мне с подобной проблемой?stackoverflow.com/questions/43381449/… Hana
Как бы вы изменили значения в массиве с помощью значения ползунка. Не могли бы вы показать пример? joaquin
как, например, оба ползунка будут просто скользить по своим соответствующим значениям дискретного массива. Или даже, я могу объявить формулу для hte и hre ... ничего страшного, но просто чтобы показать вам, ребята, я упомянул это как массив, который является идеальным. khan

Ваш Ответ

1   ответ
5

После вашего комментария я выбрал ползунки таким образом, чтобы они умножали значения в массивах. Вы должны применить свой конкретный алгоритм.

from pylab import *
from matplotlib.widgets import Slider
import numpy as np

hte = np.array([10, 11, 12, 13, 15, 20, 21, 22, 25, 30])
hre = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

k = 20 * hte
n4 = 10 * hre
t, w4 = 6, 25
x = arange(1, 100, 10)
d = log10(x) / 10

y = k + n4 * d + t + w4 + 8

ax = subplot(111)
subplots_adjust(left=0.15, bottom=0.25)
line, = plot(x, y, linewidth=2, color='r')

xlabel('X - Title')
ylabel('Y - title')
title('$Our Chart$')
grid(True)

axcolor = 'lightgoldenrodyellow'
axhte = axes([0.15, 0.1, 0.65, 0.03], axisbg=axcolor)
axhre = axes([0.15, 0.15, 0.65, 0.03], axisbg=axcolor)

shte = Slider(axhte, 'hte', 0.1, 30.0, valinit=1)
shre = Slider(axhre, 'hre', 0.1, 10.0, valinit=1)

def update(val):
    k = 20 * hte * shte.val 
    n4 = 10 * hre * shre.val

    y= k + n4 * d + t + w4 + 8

    line.set_ydata(y)    
    ax.set_ylim(y.min(), y.max())  
    draw()

shte.on_changed(update)
shre.on_changed(update)

show()

enter image description here

Хоакин, братан, два слова: ВЫ управляете! :-) Одна маленькая вещь сейчас ... увеличение и уменьшение ползунков на самом деле увеличивает и уменьшает значения hte и hre ?? плюс, когда в ползунках, когда вы определяете пределы от 0,1 до 30 и от 0,1 до 10, что на самом деле это делает? Нужно немного света на это, пожалуйста. khan
Еще раз спасибо, брат. Я включу вашу логику в свой код соответствующим образом и опубликую ее здесь ... у меня есть некоторые другие интересные вопросы, которые я опубликую сегодня. :-) большое спасибо, еще раз. Вы спасатель жизни. khan
Перемещая ползунки, вы получаете разные значения (указаны справа от ползунка). Эти значения можно прочитать изshre.val а такжеshte.val, Я использую эти переменные для умножения ваших массивов hte и hre вupdate, Я определил минимальное и максимальное значения в ползунках, как вы указываете (от 0,1 до 30 и от 0,1 до 10). Вы можете выбрать любые ограничения, которые вам нужны.

Похожие вопросы