import matplotib. pyplt as plt import numpy as np from mpl_toolkits. mplot3d import Axes3D from matplotlib. ticker import LinearLocator,FormatStrFormatte fig= plt. figure() ax=Axes3D(fig) n= 256 x= np. arange(-5,5,0.25) y= np. arange(-5,5,0.25) X,Y= np. meshgrid(x,y) R=mp. sqrt(X**2+Y**2) Z= np.sin(R) surf=ax. plot_surface( X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow')) ax. set_zlim(-1.01,1.01) ax.zaxis.set_major_locattor(LinearLocator(10)) ax.zaxis.set_major_formaatter( FormatStrFormatter('%.02f ')) fig. colorbar( surf, shrink=0.5,aspect=5) plt. show()
时间: 2024-03-29 11:36:44 浏览: 81
// 安全模式下不允许制冷
QMessageBox::warning(this, tr("警告"), tr("安全模这是一个使用matplotlib库绘制的三维图形,具体来说是一个以x、y为自变量,式下不允许制冷!"));
return;
}
// 制冷水
m_statusLabel->setText(tr("状态以sin(sqrt(x^2+y^2))为因变量的曲面图。代码中使用了numpy库生成自变量的取值范围,以及计算因变量的值。最后使用Axes3D对象的plot_surface()方法绘:制冷中"));
m_temperatureEdit->setText(QString::number(--m_temperature));
m_temperatureSlider->setValue(m_temperature);
}
void WaterDispenser::onDispenseButtonClicked()
{
// 出水
m_statusLabel->setText(tr("状态:出水制曲面图,并使用set_zlim()方法设置z轴的范围,使用zaxis.set_major_locator()和zaxis.set_major_formatter()方法设置z轴的刻度和标签格式。最后使用colorbar()方法添加颜色条。
相关问题
优化import scipy.fftpack as fp from skimage.io import imread from skimage.color import rgb2gray, gray2rgb import matplotlib.pyplot as plt from skimage.draw import rectangle_perimeter import numpy as np import cv2 import numpy as np import matplotlib.pylab as plt from mpl_toolkits.mplot3d import Axes3D # noqa: F401 unused import from mpl_toolkits.axes_grid1 import make_axes_locatable from skimage.metrics import peak_signal_noise_ratio, structural_similarity from sklearn.metrics import mean_squared_error, mean_absolute_error from matplotlib.ticker import LinearLocator, FormatStrFormatter from scipy.fftpack import dct, idct import cv2 as cv def dct2(a): return dct(dct(a, axis=0, norm='ortho'), axis=1, norm='ortho') def idct2(a): return idct(idct(a, axis=0, norm='ortho'), axis=1, norm='ortho') im = rgb2gray(imread('2.jpg')) imF = dct2(im) im1 = idct2(imF) print(np.allclose(im, im1)) plt.figure(figsize=(10,5)) plt.gray() # 绘制第一个子图 plt.subplot(121), plt.imshow(im), plt.axis('off'), plt.title('original image', size=10) # 显示第一个子图 plt.show() # 绘制第二个子图 plt.subplot(122), plt.imshow(im1), plt.axis('off'), plt.title('reconstructed image (DCT+IDCT)', size=10) ,使能控制压缩率
为了控制压缩率,您可以使用DCT系数的阈值来减少它们的数量。具体来说,您可以将DCT系数的绝对值与一个阈值进行比较,并将小于该阈值的系数设置为零。这个阈值越高,压缩率就越高,但是图像质量也会受到影响。您可以使用以下代码来实现这一点:
```python
# 设置阈值
threshold = 0.1
# 对DCT系数进行阈值处理
imF_thresh = imF * (np.abs(imF) > (threshold*np.max(imF)))
# 对处理后的DCT系数进行IDCT反变换
im2 = idct2(imF_thresh)
# 显示处理前后的图像
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
ax = axes.ravel()
ax[0].imshow(im, cmap=plt.cm.gray)
ax[0].set_title('Original image')
ax[1].imshow(im2, cmap=plt.cm.gray)
ax[1].set_title('Compressed image (DCT+IDCT)')
for a in ax:
a.axis('off')
plt.show()
```
在这个例子中,我们将阈值设置为0.1,即只保留最大DCT系数的10%。您可以根据需要调整这个值来控制压缩率和图像质量。
练习利用matplotlib库画三维曲面图、雷达图等
`matplotlib`是一个强大的数据可视化库,用于Python,它支持创建各种类型的图表,包括三维图形。下面我会简单讲解如何使用`matplotlib`及其姐妹库`mpl_toolkits.mplot3d`来绘制三维曲面图和雷达图。
**三维曲面图**:
要绘制三维曲面图,你需要先导入`matplotlib.pyplot`和`mpl_toolkits.mplot3d`模块,然后创建一个`Axes3D`对象。这里以绘制一个简单的二维函数z=f(x,y)为例:
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定义x和y网格
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
# 定义函数z = x^2 + y^2
Z = X**2 + Y**2
# 创建3D图像
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis') # 使用颜色映射
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
```
**雷达图**:
雷达图是一种用于比较多维度数据的特殊形式的折线图。首先需要`matplotlib.ticker`和`matplotlib.collections`。以下是如何制作雷达图的例子:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch
def radar_factory(n):
d = np.array([0] * n)
angles = [2*np.pi*i/n for i in range(n)]
codes = [(Path.MOVETO, (0,0))] + [(Path.LINETO, point) for point in zip(np.cos(angles), np.sin(angles))]
path = Path(codes)
return path, angles
def plot_radar(ax, angles, values, labels=None, **kwargs):
if labels is None:
labels = ['Dim {}'.format(i+1) for i in range(len(values[0]))]
path, angles = radar_factory(len(values))
patch = PathPatch(path, facecolor='w', edgecolor='k', lw=2)
ax.add_patch(patch)
ax.set_thetagrids(angles * 180/np.pi, labels, radius=1.1)
ax.axis('equal') # Equal aspect ratio ensures that circles are drawn as circles.
ax.set_rlabel_position(90) # Move radial labels away from plotted line
# Plot data
lines = ax.plot(angles * np.ones_like(values), values, **kwargs)
ax.fill(angles * np.ones_like(values), values, alpha=0.25)
# 示例
values = [[4, 6, 7, 8, 5], [2, 3, 5, 7, 6]]
plot_radar(ax, angles=np.arange(5), values=values, label=['A', 'B'], linestyle='--', linewidth=2)
plt.title("Radar Chart")
plt.show()
```
阅读全文