Увеличьте толщину оси в Matplotlib (без выреза в области заговора!) - PullRequest
0 голосов
/ 08 октября 2018

Меня интересует способ увеличения толщины осей в matplotlib (без врезки в область сюжета).То есть я хочу, чтобы толщина осей выходила за пределы графика, а не внутрь.Возможно ли такое?

Традиционные методы (например, см. Ниже), похоже, не работают:

from pylab import *

close("all")
#rc('axes', linewidth=30)

# Make a dummy plot
plot([0.01, 0, 1], [0.5, 0, 1])

fontsize = 14
ax = gca()

for axis in ['top','bottom','left','right']:
  ax.spines[axis].set_linewidth(30)

xlabel('X Axis', fontsize=16, fontweight='bold')
ylabel('Y Axis', fontsize=16, fontweight='bold')

1 Ответ

0 голосов
/ 08 октября 2018

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

import matplotlib.pyplot as plt

# Make a dummy plot
fig, ax = plt.subplots()
ax.plot([0.01, 0, 1], [0.5, 0, 1], zorder=1)

ax.axis([0,1,0,1])


for axis in ['top','bottom','left','right']:
    ax.spines[axis].set_linewidth(30)
    ax.spines[axis].set_color("gold")
    ax.spines[axis].set_zorder(0)

ax.add_patch(plt.Rectangle((0,0),1,1, color="w", transform=ax.transAxes))


ax.set_xlabel('X Axis', fontsize=16, fontweight='bold')
ax.set_ylabel('Y Axis', fontsize=16, fontweight='bold')

plt.show()

Я сделал здесь колючки желтыми, чтобы они не скрывали галочки и метки.

enter image description here

Другой вариант - адаптировать ответ от Установить край прямоугольника matplotlib вне заданной ширины? , чтобы создать прямоугольник, который строго окружаетПлощадь на участке примерно такая:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.offsetbox import AnnotationBbox, AuxTransformBox

# Make a dummy plot
fig, ax = plt.subplots()
ax.plot([0.01, 0, 1], [0.5, 0, 1], zorder=1)

ax.axis([0,1,0,1])

linewidth=14
xy, w, h = (0, 0), 1, 1
r = Rectangle(xy, w, h, fc='none', ec='k', lw=1, transform=ax.transAxes)

offsetbox = AuxTransformBox(ax.transData)
offsetbox.add_artist(r)
ab = AnnotationBbox(offsetbox, (xy[0]+w/2.,xy[1]+w/2.),
                    boxcoords="data", pad=0.52,fontsize=linewidth,
                    bboxprops=dict(facecolor = "none", edgecolor='r', 
                              lw = linewidth))
ab.set_zorder(0)
ax.add_artist(ab)

ax.set_xlabel('X Axis', fontsize=16, fontweight='bold')
ax.set_ylabel('Y Axis', fontsize=16, fontweight='bold')

plt.show()

enter image description here

...