Как изменить масштаб оси x в Matplotlib? [Дубликат]

Вы можете получить один элемент, запустив

document.querySelector('.myElement').style.size = '100px';

, но он будет работать для первого элемента с классом .myElement.

Если вы хотите применить это для всех элементы с классом я предлагаю вам использовать

document.querySelectorAll('.myElement').forEach(function(element) {
    element.style.size = '100px';
});
21
задан Yotam 16 April 2012 в 12:41
поделиться

3 ответа

Вместо того, чтобы менять тики, почему бы не заменить единицы? Сделайте отдельный массив X значений x, чьи единицы находятся в нм. Таким образом, при построении данных он уже в правильном формате! Просто убедитесь, что вы добавили xlabel, чтобы указать единицы (которые должны всегда выполняться в любом случае).

from pylab import *

# Generate random test data in your range
N = 200
epsilon = 10**(-9.0)
X = epsilon*(50*random(N) + 1)
Y = random(N)

# X2 now has the "units" of nanometers by scaling X
X2 = (1/epsilon) * X

subplot(121)
scatter(X,Y)
xlim(epsilon,50*epsilon)
xlabel("meters")

subplot(122)
scatter(X2,Y)
xlim(1, 50)
xlabel("nanometers")

show()

enter image description here [/g1]

10
ответ дан Hooked 22 August 2018 в 07:27
поделиться
  • 1
    Это то, что я хочу сделать сейчас. Я думал, что есть более элегантный способ. – Yotam 17 April 2012 в 07:17

Чтобы установить диапазон оси x, вы можете использовать set_xlim(left, right), здесь: docs

Обновление:

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

ticks = your_plot.get_xticks()*10**9
your_plot.set_xticklabels(ticks)
4
ответ дан bobrobbob 22 August 2018 в 07:27
поделиться
  • 1
    Насколько я понимаю, xlim меняет диапазон сюжета и не масштабирует его. См. Мой пример. – Yotam 16 April 2012 в 12:39
  • 2
    @Yotam. Итак, вы хотите, чтобы график был идентичным, но значения на ярлыках x изменились бы? – fraxel 16 April 2012 в 12:48
  • 3
    Удивительно простое решение. Тем не менее, я считаю, что это приводит к меткам с десятичными знаками, даже при использовании тикера, который должен отображать только целые числа (например, MultipleLocator или MaxNLocator). Я обнаружил, что это можно решить, используя ticks.astype(int) вместо ticks. – Mr.H 7 October 2017 в 14:33
  • 4
    К сожалению, get_xticks() не работает до тех пор, пока вы не заговорите. Ужасно раздражает и бессмысленно, чтобы это было так. – ArturJ 13 March 2018 в 00:48

Как вы заметили, xscale и yscale не поддерживают простое линейное повторное масштабирование (к сожалению). В качестве альтернативы ответу Hooked вместо того, чтобы возиться с данными, вы можете обмануть эти метки следующим образом:

ticks = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x*scale))
ax.xaxis.set_major_formatter(ticks)

Полный пример, показывающий масштабирование x и y:

import numpy as np
import pylab as plt
import matplotlib.ticker as ticker

# Generate data
x = np.linspace(0, 1e-9)
y = 1e3*np.sin(2*np.pi*x/1e-9) # one period, 1k amplitude

# setup figures
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
# plot two identical plots
ax1.plot(x, y)
ax2.plot(x, y)

# Change only ax2
scale_x = 1e-9
scale_y = 1e3
ticks_x = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_x))
ax2.xaxis.set_major_formatter(ticks_x)

ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_y))
ax2.yaxis.set_major_formatter(ticks_y)

ax1.set_xlabel("meters")
ax1.set_ylabel('volt')
ax2.set_xlabel("nanometers")
ax2.set_ylabel('kilovolt')

plt.show() 

И, наконец, у меня есть кредиты для изображения:

Обратите внимание, что если у вас есть text.usetex: true, как у меня, вы можете захотеть заключите метки в $, например: '${0:g}$'.

48
ответ дан oystein 22 August 2018 в 07:27
поделиться
  • 1
    Вероятно, это более правильный ответ. Спасибо @oystein – oche 26 March 2016 в 01:20
  • 2
    Это хак, который нам нужен – Georgios Pligoropoulos 6 August 2017 в 10:00
Другие вопросы по тегам:

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