本文记录Matplotlib几种论文中常见类型图表的作图方式。
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
dataset = ["Dataset 1", "Dataset 2"]
data = {"A": np.array([...]),
"B": np.array([...]),
"C": np.array([...]),
"D": np.array([...])}
best = "A"
# normalize(data)
x = np.arange(0,len(dataset)*3,3)
width = 0.15
fig, ax = plt.subplots(1,1,figsize=(6.5,3.5))
def normalize(data):
for key in data:
data[key] /= data[best]
def draw_bar(ax,title):
interval = np.arange(-len(data)+1,len(data),2)
for i, key in enumerate(data):
ax.bar(x + interval[i] * width, data[key], width*2, alpha=0.9, label=key)
ax.set_xticks(x)
ax.set_xticklabels(dataset)
# ax.set_yticks(np.arange(0, 8.5, 1.0))
ax.set_xlabel("Dataset")
ax.set_ylabel("Normalized execution time")
# for i, v in enumerate(baseline/best):
# ax.text(i, v, str(v), color='black', fontweight='bold')
ax.set_axisbelow(True)
ax.legend(loc=1,prop={"size":8})
ax.grid(axis='y')
if title != None:
ax.set_title(title)
draw_bar(ax)
# handles, labels = ax.get_legend_handles_labels()
# lgd = fig.legend(handles, labels, loc='upper center', mode="expand",ncol=3,columnspacing=0,bbox_to_anchor=(0.15, 0.62, 0.8, 0.5))
# fig.tight_layout()
plt.savefig(r"results.png",format="png",dpi=200,bbox_inches='tight')
plt.show()
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np
fig, ax = plt.subplots(1,2,figsize=(8,3))
data = {"A": np.array([...]),
"B": np.array([...]),
"C": np.array([...])}
x = np.array((1,2,4,8,16,32,48))
colors = ["red", "#91cf60", "#4575b4"]
ticks = ["x", "o", "^"]
def draw_line(ax,title=None):
for i, key in enumerate(data):
ax.plot(x, data[key], color=colors[i])
ax.plot(x, data[key], ticks[i], color=colors[i], label=key)
ax.set_xscale('log',basex=2)
ax.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.get_xaxis().get_major_formatter().labelOnlyBase = False
fmt = '%d' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)
ax.set_ylabel("Normalized execution time")
ax.set_xlabel("# of cores")
if title != None:
ax.set_title(title)
ax.legend()
draw_line(ax[0])
plt.tight_layout()
plt.savefig(r"fig/scale.pdf",format="pdf")
plt.show()