简体   繁体   中英

Hiding the y-axis in this plot

Simple question: I need to hide the y-axis from the plot generated by this code:

import matplotlib.pyplot as plt
import seaborn
seaborn.set(style="white")
import random

objects = [("Zachary's karate club", 78),
            ("dolphins social network", 159),
            ("C. elegans connectome", 2148 ),
            ("US power grid", 6594 ),
            ("PGP web of trust (2004)", 24316),
            ("Linux kernel source file includes", 230213),
            ("Enron emails (1999-2003)", 1148072),
            ("Internet autonomous systems (2005)", 11095298),
            ("CS collaborations (DBLP)", 18e6),
            ("Wikipedia hyperlinks", 350e6),
            ("Twitter follower graph (2012)", 20e9),
            ("Facebook social graph (2011)", 68.7e9),
            ("NSA social graph (?)", 1e11),
            ("human connectome (neuronal)", 1e14)
           ]

fig, ax = plt.subplots(figsize=(16,6))

for i, (name, radius) in enumerate(objects):
    sgn = 2 * (i % 2) - 1
    ax.annotate(name, xy=(radius,0), xytext=(radius,sgn* (0.5 + random.randint(1,12) * 0.1)), ha='center',
                arrowprops=dict(arrowstyle="->", connectionstyle="arc,angleA=0,armA=30,rad=30", facecolor='gray'),
               color="Maroon")
ax.set_xscale('log')
ax.set_xlim(1.e1,1.e15)
ax.set_ylim(0,4)
ax.axes.get_yaxis().set_visible(False)
ax.axhline(color='k', lw=1)
ax.plot([obj[1] for obj in objects], [0]*len(objects), 'ob', markersize=2)
ax.set_yticks([])
ax.tick_params(length=8)
ax.set_xlabel('edges')
seaborn.despine()
plt.show()

在此输入图像描述

Should be simple enough, but all the code examples I've found so far have not worked, eg fig.axes[0].get_yaxis().set_visible(False)

The left axis is from seaborn , not matplotlib. You can turn it off using:

seaborn.despine(left=True)

In response to tcaswell comment bellow:

Seaborn adds splines to the plot. The despine command accepts the following args to remove them. However, you have to explicitly tell it to turn off the left or bottom.

seaborn.despine(fig=None, ax=None, top=True, right=True, left=False, bottom=False, offset=None, trim=False)

wherein

top, right, left, bottom : boolean, optional
If True, remove that spine.

This is a bit of a hack, but appears to get the result you want.

ax.set_frame_on(False) #Remove both axes
ax.axhline(0,color='black') #Put the x axis back

Pulled from two websites:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM