2013-04-17 2 views
6

Я пытаюсь определить, как установить/исправить положение меток метки для 3D-графика matplotlib. Тик-метки не совпадают с тиками. Этот вопрос, как представляется, особенно заметен, когда требуется много ярлыков.позиция метки метки для matplotlib 3D-графика

Я привел пример (http://matplotlib.org/examples/mplot3d/polys3d_demo.html) из документации matplotlib, чтобы проиллюстрировать мой вопрос.

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.collections import PolyCollection 
from matplotlib.colors import colorConverter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(10,10)) 
ax = fig.gca(projection='3d') 

cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6) 

xs = np.arange(0, 10, 0.4) 
verts = [] 
zs = np.arange(50) 
for z in zs: 
    ys = np.ones(len(xs))*z 
    ys[0], ys[-1] = 0, 0 
    verts.append(list(zip(xs, ys))) 

poly = PolyCollection(verts,facecolor='c') 
poly.set_alpha(0.7) 
ax.add_collection3d(poly, zs=zs, zdir='y') 

ax.set_xlabel('X') 
ax.set_xlim3d(0, 10) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-1, len(zs)) 
ax.set_yticks(np.arange(len(zs))) 
labels = {} 
for l_c in zs: 
    labels[l_c] = 'This Looks Bad' 
ax.set_yticklabels(labels,rotation=-15) 
ax.set_zlabel('Z') 
ax.set_zlim3d(0, ys.max()) 

plt.show() 

enter image description here

Таким образом, вопрос: как я могу получить клещ метки для выравнивания с позиций клеща?

ответ

5

Они выравниваются, но с горизонтальным положением, расположенным по центру. Из-за 3D-вида это делает их немного ниже, где вы ожидаете их. Эффект не зависит от количества тиков, а от ширины.

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

ax.set_yticklabels(labels,rotation=-15, va='center', ha='left') 

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

Уменьшение отступов, дистанция от галочки, также может помочь.

enter image description here

+1

В качестве примечания к OP: 'va' является синонимным с' verticalalignment', как в моем примере. То же самое справедливо для 'ha' и' horizontalalignment'. – Hooked

+0

Да, спасибо за разъяснение, что аббревиатуры - это блаженство при наборе их много. :) –

+0

Спасибо @ Rutger. Я думаю, это лучшее, что можно сделать. Я уже играл с этими (ха, ва) и почти получил то, что хочу. Это лучше работает на этом примере игрушек, чем на фактической проблеме, которую я пытаюсь решить. Не могли бы вы привести пример того, как уменьшить заполнение? Возможно, добавьте свой существующий ответ. –

10

Используя эти выравнивания, я получаю гораздо лучше размещения:

ax.set_yticklabels(labels,rotation=-15, 
        verticalalignment='baseline', 
        horizontalalignment='left') 

Я изменил пример с меньшим количеством маркеров клеща, так что вы можете увидеть размещение:

enter image description here

+0

Спасибо @Hooked. Проблема в том, что мне нужно иметь все метки ярлыков (их не менее 50), поэтому использование меньших маркеров тика не является вариантом. Недостаток значительно более заметен с большим количеством меток. Даже используя варианты вашего решения (и @Rutgers), метки не выглядят выровненными. –

+0

@ random.me Вы всегда можете уменьшить размер шрифта ярлыков, но у вас все еще есть фундаментальная проблема с двумя текстами и слишком маленьким пространством! – Hooked

+0

@ random.me Вам нужны _ticks_ или _text_? – tacaswell

Смежные вопросы