plt.plot 作图美化
时间: 2023-08-27 08:05:40 浏览: 121
回答: 要对plt.plot作图进行美化,可以使用plt.style.use()函数来选择不同的样式。在引用[1]中,使用了'ggplot'样式,可以使图表具有更加专业和美观的外观。可以在代码中添加plt.style.use('ggplot')来应用该样式。另外,还可以使用其他样式,如'classic'、'seaborn'等,根据个人喜好选择合适的样式来美化图表。
相关问题
``` tc = torch.linspace(0, 1, h) xc = torch.linspace(0, 1, h) xm, tm = torch.meshgrid(xc, tc) x = xm.reshape(-1, 1) t = tm.reshape(-1, 1) u_pred = model.to('cpu')(torch.cat([x, t], dim=1)) u_pred_fig = u_pred.reshape(h , h).detach().numpy() #作PINN数值解图 fig = plt.figure(1) ax = fig.add_axes(Axes3D(fig)) ax.plot_surface(xm.detach().numpy(), tm.detach().numpy(), u_pred_fig, cmap='hot', linewidth=0) ax.text2D(0.5, 0.9, "PINN", transform=ax.transAxes) ax.set_xlabel('x', fontsize=20) ax.set_ylabel('t', fontsize=20) ax.set_zlabel('real solve', fontsize=20) plt.show() fig.savefig("PINN solve1.png") plt.close()```python画图怎么让这段代码中三维图的t与x起点在同一点
从代码来看,您正在生成一个三维曲面图,并希望通过调整 `t` 和 `x` 的起点位置使得它们在同一点开始。
目前的问题可能是由于网格划分的方式导致的。以下是解决方法及解释:
### 解决方案
通过检查您的代码发现,`tc` 和 `xc` 分别是 `[0, 1]` 区间内均匀分布的一维数组,长度均为 `h`。然后通过 `meshgrid` 将其转换为二维网格矩阵用于绘图。为了保证三维图上 `t` 和 `x` 起点一致,需要确保两个一维数组的第一个元素都等于零(即 `tc[0]==0` 和 `xc[0]==0`),同时绘制时坐标范围保持一致性。
#### 修改建议
确认起始值是否满足需求即可,在现有代码基础上无需更改太多内容,因为当前已经设置区间是从 `0` 到 `1`:
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import torch
# 参数定义
h = 50 # 网格数可以自定
# 创建等距序列并构建网格
tc = torch.linspace(0, 1, h) # t轴数据 [0, 1]
xc = torch.linspace(0, 1, h) # x轴数据 [0, 1]
xm, tm = torch.meshgrid(xc, tc)
# 检查第一个元素确实都是0
print(f"First element of xc: {xc[0]}")
print(f"First element of tc: {tc[0]}")
# 假设模型输出u_pred部分省略...
u_pred_fig = np.random.rand(h,h) # 示例随机数据代替实际计算结果
# 绘制图形
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(projection='3d')
surf = ax.plot_surface(
xm.numpy(), # X坐标网格化后的矩阵转成numpy形式
tm.numpy(), # T坐标同样处理好送入作图函数
u_pred_fig, # 数值解高度信息对应到Z方向上去
cmap="viridis",
edgecolor='none',
alpha=0.8 # 设置透明度方便观察细节结构变化情况
)
# 添加标题和其他标注说明文字等内容完善整个图像展示效果。
ax.set_title('PINN Numerical Solution', fontsize=24);
ax.text2D(0.5, .9,"Start Point Aligned",transform=ax.transAxes,color="blue")
ax.set_xlabel('$x$', fontsize=20,labelpad=-10);
ax.set_ylabel('$t$',fontsize=20,labelpad=-10);
ax.set_zlabel(r'$\hat{u}(x,t)$',rotation=75,fontsize=20);
cb = fig.colorbar(surf,pad=.02,fraction=0.025)
cb.ax.tick_params(labelsize=16)
plt.tight_layout();
plt.show()
```
**注意:**
上述修改仅验证了初始条件无误;另外还增加了其他辅助功能如颜色条、字体大小适配以及一些样式美化选项供参考应用场合下进一步优化呈现质量。
---
plt.xticks()设置不等比例的刻度
### 如何使用 `plt.xticks()` 设置不等比例的刻度
`matplotlib` 提供了灵活的方式来定制坐标轴上的刻度,其中 `plt.xticks()` 是用于设置 X 轴刻度的一个重要方法。它允许用户指定自定义的位置和标签,从而实现不等间距的刻度。
以下是关于如何使用 `plt.xticks()` 来设置不等比例刻度的具体说明:
#### 方法描述
`plt.xticks(ticks=None, labels=None)` 的两个主要参数分别是:
- **ticks**: 刻度位置列表,表示在 X 轴上哪些位置放置刻度线。
- **labels**: 对应于 ticks 参数中每个位置的标签字符串或数值[^1]。
如果仅提供 `ticks` 参数,则会自动应用默认的数字标签;而当同时提供了 `labels` 参数时,可以完全控制显示的内容。
#### 示例代码
下面是一个完整的例子,展示了如何创建带有不均匀间隔刻度的图表:
```python
import matplotlib.pyplot as plt
# 数据准备
x = [0, 1, 2, 3, 4]
y = [i**2 for i in x]
# 创建绘图区域
fig, ax = plt.subplots()
# 绘制曲线
ax.plot(x, y)
# 自定义X轴刻度 (不均分布)
custom_ticks_positions = [0, 1.5, 2.8, 3.9] # 不同距离的刻度点
custom_tick_labels = ['Start', 'Mid-low', 'Mid-high', 'End'] # 对应的文字标注
# 应用到xticks()
plt.xticks(custom_ticks_positions, custom_tick_labels)
# 添加网格以便更清晰查看效果
plt.grid(True)
# 显示图形
plt.show()
```
此脚本首先定义了一条简单的抛物线路径作为背景数据,接着利用 `plt.xticks()` 函数指定了四个特定位置及其对应的名称标记,最终呈现出一种视觉上具有明显区隔感的效果[^2]。
另外需要注意的是,在实际操作过程中可能还需要考虑字体大小、旋转角度等因素以优化可读性和美观程度。可以通过额外传递关键字参数至 `plt.xticks()` 中完成进一步美化工作,比如设置 labelrotation 或 fontsize 属性值。
#### 注意事项
尽管能够自由设定任意复杂的模式,但在设计时不建议过度复杂化布局以免影响观者理解效率。保持简洁明了始终是科学作图的重要原则之一[^3]。
---
阅读全文
相关推荐










