ax.set_position
时间: 2023-07-06 22:23:45 浏览: 212
ax.set_position()是Matplotlib中用于设置子图位置和大小的方法。该方法需要传入一个包含四个元素的元组,分别表示子图的左边界、底边界、宽度和高度,单位是图像宽度和高度的百分比。例如,如果想要将子图放置在图像的左下角,并且占据图像宽度和高度的30%,可以使用以下代码:
```
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [2, 4, 6, 8, 10])
ax.set_position([0.1, 0.1, 0.3, 0.3])
plt.show()
```
这样就可以将子图放置在图像的左下角,并且占据图像宽度和高度的30%。注意,左边界和底边界的值是相对于整个图像的,而宽度和高度的值是相对于子图的。
相关问题
import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体 # 读取数据 data = pd.read_excel('FenDMC_sale.xlsx') # 绘制箱线图 fig= plt.figure(figsize=(100, 30), dpi=300) gs = fig.add_gridspec(nrows=1, ncols=1) ax = fig.add_subplot(gs[0, 0]) ax.set_position([0.1, 0.2, 1, 1]) boxes = [] medians = [] labels = [] for name, group in data.groupby('FenDMC'): boxes.append(group['sale']) labels.append('\n'.join(name.split())) median = group['sale'].median() medians.append(median) ax.plot([len(medians)], [median], '-bo') ax.boxplot(boxes, labels=labels,flierprops={'marker': 'o', 'markerfacecolor': 'red', 'markersize': 20}) # 配置图表 ax.set_xlabel('FenDMC') ax.set_ylabel('sale') ax.set_title('FenDMC and sale boxplot') plt.xticks(fontsize=20) plt.yticks(fontsize=20) # 调整边距,使图像居中 plt.tight_layout() # 保存图像 plt.savefig('不同分档销售销售差价高于20万.png') # 显示图形 plt.show() 绘图后发现FenDMC太长,怎么可以换行,折线图怎么可以连起来,这个图每个FenDMC是一条线
要让FenDMC换行,可以将name的字符串按照一定长度进行分割,并用\n连接各部分。例如,可以在for循环中的labels.append()语句中修改为:
```python
labels.append('\n'.join([name[i:i+10] for i in range(0, len(name), 10)]))
```
这样,每个FenDMC字符串就会按照长度为10进行分割,并用\n连接各部分。
至于折线图,可以在for循环中的ax.plot()语句中添加参数“-”来连接各个点,例如:
```python
ax.plot([len(medians)], [median], '-bo', markersize=10, linewidth=2)
```
其中,参数“-”代表用线连接各个点,markersize和linewidth则分别代表点的大小和线的宽度。
import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体 # 读取数据 data = pd.read_excel('FenDMC_sale.xlsx') # 绘制箱线图 fig= plt.figure(figsize=(100, 30), dpi=300) gs = fig.add_gridspec(nrows=1, ncols=1) ax = fig.add_subplot(gs[0, 0]) # ax.set_position([0.1, 0.2, 1, 1]) boxes = [] medians = [] labels = [] for name, group in data.groupby('FenDMC'): boxes.append(group['sale']) labels.append('\n'.join([name[i:i+10] for i in range(0, len(name), 10)])) median = group['sale'].median() medians.append(median) ax.plot([len(medians)], [median], '-bo', markersize=10, linewidth=2) ax.boxplot(boxes, labels=labels,flierprops={'marker': 'o', 'markerfacecolor': 'red', 'markersize': 20}) # 配置图表 ax.set_xlabel('FenDMC') ax.set_ylabel('sale') ax.set_title('FenDMC and sale boxplot') plt.xticks(fontsize=20) plt.yticks(fontsize=20) # 调整边距,使图像居中 plt.tight_layout() # 保存图像 plt.savefig('不同分档销售销售差价高于20万.png') # 显示图形 plt.show() 怎么可以把折线图标记的蓝色点连成折线
要将标记的蓝色点连成折线,可以在for循环中记录每个点的坐标,然后在循环结束后通过plt.plot()函数将这些点连成折线。例如:
```python
x = list(range(1, len(medians)+1)) # x轴坐标,从1到总分档数
y = medians # y轴坐标,即各分档销售额的中位数
ax.plot(x, y, 'bo-', markersize=10, linewidth=2)
```
在上述代码中,x轴坐标是从1到总分档数,y轴坐标是各分档销售额的中位数。参数“bo-”代表用蓝色点和线连接各个点,markersize和linewidth分别代表点的大小和线的宽度。
将上述代码添加到for循环外即可。
阅读全文