Aby usunąć ramkę na rysunku, piszę
frameon=False
działa idealnie z pyplot.figure
, ale matplotlib.Figure
usuwa tylko szare tło, ramka pozostaje. Poza tym chcę, aby tylko linie były widoczne, a cała reszta rysunku była przezroczysta.
z pyplot mogę robić, co chcę, chcę to zrobić z matplotlib z jakiegoś długiego powodu, wolę nie wspominać o rozszerzaniu mojego pytania.
python
matplotlib
Emmet B.
źródło
źródło
savefig
? (Jeśli tak, zastępuje to, co ustawiłeś podczas zapisywania rysunku.) Czy ręczne ustawieniefig.patch.set_visible(False)
działa?Odpowiedzi:
Po pierwsze, jeśli używasz
savefig
, pamiętaj, że podczas zapisywania nadpisuje kolor tła figury, chyba że określisz inaczej (npfig.savefig('blah.png', transparent=True)
.).Jednak aby usunąć tło osi i figury na ekranie, musisz ustawić oba te ustawienia
ax.patch
ifig.patch
być niewidocznym.Na przykład
(Oczywiście nie widać różnicy na białym tle SO, ale wszystko jest przezroczyste ...)
Jeśli nie chcesz pokazywać niczego poza linią, wyłącz również oś za pomocą
ax.axis('off')
:W takim przypadku możesz jednak chcieć, aby osie zajmowały całą figurę. Jeśli ręcznie określisz położenie osi, możesz powiedzieć mu, aby zajął całą figurę (naprzemiennie możesz użyć
subplots_adjust
, ale jest to prostsze w przypadku pojedynczych osi).źródło
ax.axis('off')
(nadal będziesz musiał wyłączyć ramkę figury).ax.set_yticklabels(('G1', 'G2', 'G3'))
print_png()
RzucaTypeError: write() argument must be str, not bytes
wyjątek dla mnie na pytona 3. Otwarcie plik jako zapis binarny ('wb'
) jest potrzebne do jego pracy.ax.axis('off')
, jak wskazał Joe Kington, usunie wszystko z wyjątkiem wykreślonej linii.Dla tych, którzy chcą tylko usunąć ramkę (obramowanie) i zachować etykiety, paski itp., Można to zrobić, uzyskując dostęp do
spines
obiektu na osi. Biorąc pod uwagę obiekt osiax
, poniższe czynności powinny usunąć obramowanie ze wszystkich czterech stron:A w przypadku usunięcia
x
iy
kleszczy z działki:źródło
ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom')
Najłatwiejszy sposób na pozbycie się brzydkiej ramki w nowszych wersjach matplotlib:
Jeśli naprawdę musi zawsze używać podejścia obiektowego, to zrobić:
ax.set_frame_on(False)
.źródło
ax.set_frame_on(False)
, który robi to samo. Może uwzględnij w powyższej odpowiedzi.Opierając się na doskonałej odpowiedzi @ peeol , możesz również usunąć ramkę, wykonując czynność
Aby podać przykład (cały przykład kodu można znaleźć na końcu tego postu), powiedzmy, że masz taki wykres słupkowy,
możesz usunąć ramkę za pomocą powyższych poleceń, a następnie zachować etykiety
x-
iytick
(wykres niepokazany) lub je również usunąćW takim przypadku można bezpośrednio oznaczyć pręty; ostateczna fabuła mogłaby wyglądać następująco (kod można znaleźć poniżej):
Oto cały kod, który jest niezbędny do wygenerowania wykresów:
źródło
Jak odpowiedziałem tutaj , możesz usunąć grzbiety ze wszystkich swoich wykresów poprzez ustawienia stylu (arkusz stylów lub rcParams):
źródło
Problem
Miałem podobny problem z osiami. Parametrem klasy jest,
frameon
ale kwarg jestframe_on
. axes_api>>> plt.gca().set(frameon=False)
AttributeError: Unknown property frameon
Rozwiązanie
frame_on
Przykład
źródło
Robię to:
źródło
Aby usunąć ramkę wykresu
Mam nadzieję, że to zadziała
źródło
źródło
powinien załatwić sprawę.
źródło
plt.savefig ma te opcje w sobie, wystarczy wcześniej wyłączyć osie
źródło