使用 matplotlib 在直方图上标记 x 轴而不重叠标签

Label x axis on an histogram without overlapping the label using matplotlib

我正在绘制直方图,我想标记 x 轴。但是当我给它贴上标签时,数字重叠了。我该如何解决?

import collections
import matplotlib.pyplot as plt
import networkx as nx

degree_sequence = sorted([d for n, d in G.degree()], reverse=True)  # degree sequence
# print "Degree sequence", degree_sequence
degreeCount = collections.Counter(degree_sequence)
deg, cnt = zip(*degreeCount.items())

fig, ax = plt.subplots()
plt.bar(deg, cnt, width=0.80, color='b')

plt.title("Degree Histogram")
plt.ylabel("Count")
plt.xlabel("Degree")
ax.set_xticks([d + 0.4 for d in deg])
ax.set_xticklabels(deg)

# draw graph in inset
plt.axes([0.4, 0.4, 0.5, 0.5])
Gcc = G.subgraph(sorted(nx.connected_components(G), key=len, reverse=True)[0])
pos = nx.spring_layout(G)
plt.axis('off')
nx.draw_networkx_nodes(G, pos, node_size=20)
nx.draw_networkx_edges(G, pos, alpha=0.4)

plt.savefig('degree_distribution.png')
plt.show()

.jpg)

您可以 space 使用 range() 函数中的 step 参数输出您的 xticks

ax.set_xticks(range(0, max(deg), 5))

您将刻度标签设置为 deg,这是网络中存在的所有度数的可迭代对象。如果不设置labels,由于barplot中的x是度数序列,matplotlib会降低tick-labels的出现频率,使其看起来不错。所以基本上只是跳过设置刻度和标签的那两行:

import collections
import matplotlib.pyplot as plt
import networkx as nx

G = nx.fast_gnp_random_graph(100,0.05,seed=1)
degree_sequence = sorted([d for n, d in G.degree()], reverse=True)  # degree sequence
# print "Degree sequence", degree_sequence
degreeCount = collections.Counter(degree_sequence)
deg, cnt = zip(*degreeCount.items())

fig, ax = plt.subplots(figsize=(10,6))
plt.bar(deg, cnt, width=0.80, color='b')

plt.title("Degree Histogram")
plt.ylabel("Count")
plt.xlabel("Degree")

# draw graph in inset
plt.axes([0.4, 0.4, 0.5, 0.5])
Gcc = G.subgraph(sorted(nx.connected_components(G), key=len, reverse=True)[0])
pos = nx.spring_layout(G)
plt.axis('off')
nx.draw_networkx_nodes(G, pos, node_size=20)
nx.draw_networkx_edges(G, pos, alpha=0.4)

plt.savefig('degree_distribution.png')
plt.show()