Конечно, существует некоторый риск для безопасности с помощью JavaScript на мобильных телефонах - если бы этого не было, вы могли бы быть уверены, что настольные браузеры будут иметь такую же безопасность! Но у мобильных пользователей, скорее всего, есть JavaScript, потому что, особенно на iPhone, он должен стоять за функциональность Flash или Silverlight. JS также используется для обеспечения аутентичных межфаковых элементов управления для веб-приложений и, следовательно, имеет еще большую добавленную стоимость.
Конечно, он идеален для поддержки пользователей без JavaScript. Если это возможно, вы должны абсолютно стремиться к этому, если динамические взаимодействия не являются настолько неотъемлемыми для вашей службы, что вы не можете этого избежать.
Просто поместите цветную панель на свою собственную ось и используйте subplots_adjust
, чтобы освободить место.
В качестве быстрого примера:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax)
plt.show()
[/g0]
Как указано в других ответах, идея, как правило, заключается в определении осей для цветной панели, в которой они находятся. Существуют различные способы сделать это; который еще не упоминался, заключался бы в прямом определении осей colorbar при создании подзадачи с помощью plt.subplots()
. Преимущество состоит в том, что положение оси не нужно устанавливать вручную, и во всех случаях с автоматическим аспектом цветная панель будет точно такой же высоты, как и подзаголовки. Даже во многих случаях, когда используются изображения, результат будет удовлетворительным, как показано ниже.
При использовании plt.subplots()
использование аргумента gridspec_kw
позволяет сделать оси цветной панели намного меньшими, чем другие оси.
fig, (ax, ax2, cax) = plt.subplots(ncols=3,figsize=(5.5,3),
gridspec_kw={"width_ratios":[1,1, 0.05]})
Пример:
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
fig, (ax, ax2, cax) = plt.subplots(ncols=3,figsize=(5.5,3),
gridspec_kw={"width_ratios":[1,1, 0.05]})
fig.subplots_adjust(wspace=0.3)
im = ax.imshow(np.random.rand(11,8), vmin=0, vmax=1)
im2 = ax2.imshow(np.random.rand(11,8), vmin=0, vmax=1)
ax.set_ylabel("y label")
fig.colorbar(im, cax=cax)
plt.show()
Это хорошо работает, если аспект сюжета автомасштабирован или изображения сокращаются из-за их аспекта в направлении ширины (как указано выше). Если, однако, изображения более широкие, но высокие, результат будет выглядеть следующим образом, что может быть нежелательным.
Решение по исправлению цветной панели высота до высоты подзаголовка должна была бы использовать mpl_toolkits.axes_grid1.inset_locator.InsetPosition
для установки осей цветной панели относительно осей поднабора изображения.
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
from mpl_toolkits.axes_grid1.inset_locator import InsetPosition
fig, (ax, ax2, cax) = plt.subplots(ncols=3,figsize=(7,3),
gridspec_kw={"width_ratios":[1,1, 0.05]})
fig.subplots_adjust(wspace=0.3)
im = ax.imshow(np.random.rand(11,16), vmin=0, vmax=1)
im2 = ax2.imshow(np.random.rand(11,16), vmin=0, vmax=1)
ax.set_ylabel("y label")
ip = InsetPosition(ax2, [1.05,0,0.05,1])
cax.set_axes_locator(ip)
fig.colorbar(im, cax=cax, ax=[ax,ax2])
plt.show()
ax = fig.add_subplot()
? Я спрашиваю, потому что я не могу понять, как использовать его с базой.
– lanadaquenada
23 May 2018 в 16:10
GridSpec
в add_subplot()
.
– ImportanceOfBeingErnest
23 May 2018 в 16:16
Использование make_axes
еще проще и дает лучший результат. Он также предоставляет возможности для настройки позиционирования цветной панели. Также обратите внимание на возможность subplots
делиться осями x и y.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
for ax in axes.flat:
im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)
cax,kw = mpl.colorbar.make_axes([ax for ax in axes.flat])
plt.colorbar(im, cax=cax, **kw)
plt.show()
[/g0]
nrows=1
, цветная панель снова станет больше, чем подзаголовки.
– Wesley Tansey
6 April 2015 в 00:41
Как новичок, который наткнулся на этот поток, я хотел бы добавить адаптацию python для манекенов очень аккуратного ответа abevieiramota (потому что я на том уровне, что мне нужно было искать «ravel» для разработки что их код делал):
import numpy as np
import matplotlib.pyplot as plt
fig, ((ax1,ax2,ax3),(ax4,ax5,ax6)) = plt.subplots(2,3)
axlist = [ax1,ax2,ax3,ax4,ax5,ax6]
first = ax1.imshow(np.random.random((10,10)), vmin=0, vmax=1)
third = ax3.imshow(np.random.random((12,12)), vmin=0, vmax=1)
fig.colorbar(first, ax=axlist)
plt.show()
Гораздо меньше pythonic, гораздо легче для noobs, подобных мне, чтобы посмотреть, что на самом деле происходит здесь.
Решение по использованию списка осей abevieiramota работает очень хорошо, пока вы не используете только один ряд изображений, как указано в комментариях. Использование разумного соотношения сторон для figsize
помогает, но все еще далек от совершенства. Например:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(9.75, 3))
for ax in axes.flat:
im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)
fig.colorbar(im, ax=axes.ravel().tolist())
plt.show()
Функция colorbar предоставляет параметр shrink
, который является коэффициентом масштабирования для размер осей цветной панели. Это требует некоторых ручных проб и ошибок. Например:
fig.colorbar(im, ax=axes.ravel().tolist(), shrink=0.75)
thecb = ax.cax.colorbar(im)
. Тогда вы можете сделать thecb.set_label_text("foo")
– spinup
22 July 2017 в 04:06
rect
указывает ограничительную рамку фигурных элементов с областью рисунка. Он принимает нормализованные координаты фигур, а по умолчанию - [0,0,1,1]
. Поэтому указание rect=[0,0,0.9,1]
в качестве аргумента tight_layout
приведет к тому, что элементы фигуры, которые tight_layout будут знать, будут находиться в пределах 90% от ширины фигуры, оставив 10% для вашей метки. См. doc .
– spinup
9 August 2017 в 19:56
vmin
иvmax
являются критическими. Они контролируют цветовой диапазон каждого подзаголовка. Если у вас есть реальные данные, вам может понадобиться пройти через это, чтобы сначала найти значения min и max. – kungfujam 3 September 2015 в 10:01