本文于r format(Sys.Date(), "%Y-%m-%d")更新。 如发现问题或者有建议,欢迎提交 Issue
Jupyter Notebook
<iframe seamless src="https://raw.githubusercontent.com/JiaxiangBU/picbackup/master/is_and_equal.html" width="120%" height="800">
</iframe>
构建两个x轴 [@Kington2010]
其中一个是group的性质。
```{python eval=F} import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl
def annotate_group(name, xspan, ax=None): “““Annotates a span of the x-axis”” def annotate(ax, name, left, right, y, pad): arrow = ax.annotate(name, xy=(left, y), xycoords=‘data’, xytext=(right, y-pad), textcoords=‘data’, annotation_clip=False, verticalalignment=‘top’, horizontalalignment=‘center’, linespacing=2.0, arrowprops=dict(arrowstyle=’-’, shrinkA=0, shrinkB=0, connectionstyle=‘angle,angleB=90,angleA=0,rad=5’) ) return arrow if ax is None: ax = plt.gca() ymin = ax.get_ylim()[0] ypad = 0.01 * np.ptp(ax.get_ylim()) xcenter = np.mean(xspan) left_arrow = annotate(ax, name, xspan[0], xcenter, ymin, ypad) right_arrow = annotate(ax, name, xspan[1], xcenter, ymin, ypad) return left_arrow, right_arrow
def make_second_bottom_spine(ax=None, label=None, offset=0, labeloffset=20): “““Makes a second bottom spine”” if ax is None: ax = plt.gca() second_bottom = mpl.spines.Spine(ax, ‘bottom’, ax.spines[‘bottom’]._path) second_bottom.set_position((‘outward’, offset)) ax.spines[‘second_bottom’] = second_bottom
if label is not None:
# Make a new xlabel
ax.annotate(label,
xy=(0.5, 0), xycoords='axes fraction',
xytext=(0, -labeloffset), textcoords='offset points',
verticalalignment='top', horizontalalignment='center')
#– Generate some data —————————————————- nx = 10 x = np.linspace(0, 2*np.pi, 10) y = 2 * np.sin(x)
groups = [(‘GroupA’, (x[0], x[nx//3])), (‘GroupB’, (x[-2*nx//3], x[2*nx//3])), (‘GroupC’, (x[-nx//3], x[-1]))]
#– Plot the results —————————————————— fig = plt.figure() ax = fig.add_subplot(111)
Give ourselves a bit more room at the bottom
plt.subplots_adjust(bottom=0.2)
ax.plot(x,y, ‘k^’)
Drop the bottom spine by 40 pts
ax.spines[‘bottom’].set_position((‘outward’, 40))
Make a second bottom spine in the position of the original bottom spine
make_second_bottom_spine(label=‘Treatment’)
Annotate the groups
for name, xspan in groups: annotate_group(name, xspan)
plt.xlabel(‘Dose’) plt.ylabel(‘Response’) plt.title(‘Experimental Data’)
plt.show() plt.clf() ```
