Вы можете обмануть что-то;)
В принципе, используйте псевдоэлемент :before
для дочернего div с его одинаковым размером;
, когда вы наводите указатель на дочерний div , увеличьте псевдоэлемент :before
, чтобы покрыть область div отца; это приведет к падению эффекта отца div hover
, а затем вернуться в исходное состояние. Точная комбинация z-индекса также задействована.
Демо: http://jsfiddle.net/gFu8h/
blockquote>CSS Dark Magic (tm)
.parent { width:100px; height:100px; padding:50px; transition:background-color 1s; background:#3D6AA2; position: relative; z-index: 1; } .parent:hover{ background:#FFF; } .child { height:100px; width:100px; background:#355E95; transition:background-color 1s; position: relative; } .child:hover { background:#000; } .child:before{ content: ''; position: absolute; top: 0; bottom: 0; right: 0; left: 0; z-index: -1; transition:background-color 1s; } .child:hover:before{ top: -50px; bottom: -50px; left: -50px; right: -50px; background:#3D6AA2; }
Я разделяю ваше разочарование. Я работал над этим полчаса и ничего не получил. Документы говорят, что set_xlabel принимает arg labelpad , но я получаю ошибку (AttributeError: Неизвестное свойство labelpad)! Установка его после факта ничего не делает, на xaxis или w_xaxis.
Вот грубый обходной путь:
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure(figsize=(8,4), facecolor='w')
ax = figure.gca(projection='3d')
xLabel = ax.set_xlabel('\nXXX xxxxxx xxxx x xx x', linespacing=3.2)
yLabel = ax.set_ylabel('\nYY (y) yyyyyy', linespacing=3.1)
zLabel = ax.set_zlabel('\nZ zzzz zzz (z)', linespacing=3.4)
plot = ax.plot([1,2,3],[1,2,3])
ax.dist = 10
pyplot.show()
Мне действительно нужно чаще следить за StackOverflow. Я текущий сопровождающий mplot3d. Причина, по которой различные приемы, которые обычно работают на обычных 2D-графиках, не работают для 3D-графиков, заключается в том, что mplot3d изначально был написан с жестко заданными значениями по умолчанию. Также были ошибки в том, как mplot3d вычислял угол для рендеринга надписей.
v1.1.0 содержит несколько исправлений для улучшения положения вещей. Я исправил просчет углов меток осей и внес некоторые коррективы в интервал. В следующем выпуске я хотел бы, чтобы трехмерные оси занимали больше, чем стандартное расстояние между осями, поскольку стандартное задание было разработано с учетом того, что метки тиков и метки осей находились бы вне осей, что не относится к mplot3d , Поскольку расстояния в mplot3d определяются относительными пропорциями, из-за меньшего пространства для работы метки сближаются.
Что касается других возможных путей обхода, см. Примечание здесь . Справедливое предупреждение, этот частный словарь не предназначен для того, чтобы быть постоянным решением, а скорее неизбежным злом, пока не завершится рефакторинг mplot3d.
Кроме того, v1.1.0 содержит много обновлений API mplot3d. Пожалуйста, ознакомьтесь с пересмотренной документацией здесь .
Добавьте это для каждой оси, измените число:
axes.yaxis.labelpad=30
Это упомянуто в ссылке Адамом Хьюзом как не работающее, но оно работает для меня.
В новых версиях matplotlib это делается следующим образом:
ax.xaxis._axinfo['label']['space_factor'] = 2.8
См. Объяснение здесь:
https://github.com/matplotlib/matplotlib / Issues / 3610
Протестировано на v1.4, должен работать в версиях> 1.1, я считаю.
Это изменяет заполнение для всех (x, y, z) меток в одном кадре. Мне больше нравится этот подход:
from matplotlib import rcParams
rcParams['axes.labelpad'] = 20
Как практика проектирования, преобразованный текст не очень разборчивый. Я бы посоветовал вам использовать метки для вашей оси, возможно, с цветовым кодированием. Вот как вы делаете это в matplotlib
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure()
figure.subplots_adjust(bottom=0.25, top=0.75)
axes = figure.gca(projection='3d')
xLabel = axes.set_xlabel('X', fontsize=14, fontweight='bold', color='b')
yLabel = axes.set_ylabel('Y',fontsize=14, fontweight='bold', color='r')
zLabel = axes.set_zlabel('Z',fontsize=14, fontweight='bold', color='g')
x = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='b')
y = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='r')
z = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='g')
handles, labels = axes.get_legend_handles_labels()
axes.legend((x,y,z),("XXXXXX","YYYYY","ZZZZZZ"),'best')
plot = axes.plot([1,2,3],[1,2,3])
pyplot.show()
Можно использовать labelpad
после этого, Вы выводите свою фигуру на печать:
axes = fig.gca(projection='3d')
axes.xaxis.labelpad=20
axes.yaxis.labelpad=20
axes.zaxis.labelpad=20
Это могло бы заставить подписи оси выходить за пределы 3D графика, таким образом, необходимо скорректировать расстояние с помощью dist
метод:
ax.dist = 13