R画图采用非渐近色颜色设置

由于画图需要,在颜色比较多时,直接使用rainbow()等渐近色颜色设置函数,这样比较方便省时,但也存在问题,当要展示的图型类型过少时,渐近色不容易区分,需要进行跳跃性颜色设置,最好此时的颜色设置是离散的。解决方案是安装RColorBrewr包


1.RColorBrewr 提供了3套配色方案。

(1).连续型 sequential, 颜色渐变。

(2)极端型Diverging,生成深色强调两端、浅色表示中部的颜色,可用来标注数据中的离群点。

(3)离散型Qualitative,生成彼此差异明显的颜色,通常用来标记分类数据。

2.安装RColorBrewer包,并加载。

(1)查看连续型的种类。

display.brewer.all(type="seq")# 有9种颜色。

用法:barplot(rep(1,6),col=brewer.pal(9,"Blues"))# 数字9,表示使用色条中

任务描述 相关知识 plt.axes创建子图 fig.add_axes()创建子图 编程要求 测试说明 任务描述 本关任务:绘制一个包含两个样式不一致的子图。 相关知识 为了完成本关任务,你需要掌握:1.如何使用plt.axes创建子图,2.如何使用fig.add_axes()创建子图。 plt.axes创建子图 前面已经介绍过plt.axes函数,这个函数默认配置是创建一个标准的坐标轴,填满整张图。 它还有一个可选的参数,由图形坐标系统的四个值构成。这四个值表示为坐标系的[底坐标、左坐标、宽度、高度],数值的取值范围为左下角为0,右上角为1。 下面演示在右上角创建一个画中画: x1 = plt.axes() # 默认坐标轴 ax2 = plt.axes([0.65, 0.65, 0.2, 0.2]) fig.add_axes()创建子图 面向对象画图接口中类似的命令由fig.add_axes()。用这个命令创建两个竖直排列的坐标轴: fig = plt.figure() ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], xticklabels=[], ylim=(-1.2, 1.2)) ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4], ylim=(-1.2, 1.2)) x = np.linspace(0, 10) ax1.plot(np.sin(x)) ax2.plot(np.cos(x)); 可以看到两个紧挨着的坐标轴:上子图的(起点y坐标为0.5位置)与下子图x轴刻度是对应的(起点y坐标为0.1,高度为0.4)。 编程要求 根据提示,在右侧编辑器Begin-End处补充代码,根据输入数据绘制一个一行两列的折线图子图。子图一设置输入数据为x轴,输入数据的平方为y轴;设置颜色为红;linestyle为--;线的宽度为1;透明的为0.3。子图二设置输入数据为x轴,输入数据的自然对数为y轴,具体可视化要求如下: 图形的figsize为(12, 12); 图形保存到Task1/img/T1.png。 测试说明 平台会对你编写的代码进行测试: 预期输出:你的答案与正确答案一致 提示: #输入数据为x plt.plot(x,x**2) plt.plot(x,np.log(x)) 开始你的任务吧,祝你成功!import matplotlib matplotlib.use("Agg") import numpy as np import matplotlib.pyplot as plt def student(x): ''' 根据输入数据绘制不同的两个子图 :param x: 输入数据,类型为array :return: None ''' # ********* Begin *********# # ********* End *********#
最新发布
05-30
<think>好的,我现在需要帮助用户了解如何使用Matplotlib的plt.axes和fig.add_axes方法来创建一行两列的子图,并分别显示输入数据与其平方以及自然对数的关系。首先,我得回顾用户的问题和之前的对话,确保答案符合他们的需求。用户之前的问题是关于绘制一行两列的子图,当时我给出的示例是使用plt.subplots方法。现在他们想改用plt.axes和fig.add_axes,这两个方法更灵活但需要手动设置位置和大小。我需要确保回答中正确区分这两种方法,并展示如何用它们创建子图。 首先,用户提到要使用plt.axes和fig.add_axes。根据引用中的内容,fig.add_axes需要指定[left, bottom, width, height]的参数,而plt.axes也可以类似地添加坐标轴。我需要详细说明这两种方法的步骤,并提供示例代码。 接下来,用户希望两个子图分别显示数据与平方及自然对数的关系。输入数据可能需要用户提供,或者示例中生成。这里可能需要生成示例数据,比如使用numpy生成x值,然后计算y1= x^2,y2 =ln(x)。但要注意自然对数在x=0处无定义,可能需要调整数据范围,比如从0.1开始。然后,考虑子图的样式不同。可能需要设置不同的颜色、线型、标题、坐标轴标签等。例如,第一个子图用红虚线,第二个用蓝圆点,并添加网格和图例。需要确保代码中正确使用fig.add_axes和plt.axes,并正确设置每个子图的位置。例如,一行两列可能需要两个横向排列的坐标轴,每个占据适当的位置。比如,第一个子图的位置是[0.1,0.1,0.35,0.8],第二个是[0.55,0.1,0.35,0.8],这样左右排列,中间留有空隙。还要处理自然对数的数据范围,避免x=0的情况。例如,生成x从0.1到10,步长0.1,这样ln(x)就有定义。 在代码中,需要导入必要的库,生成数据,创建figure对象,然后依次添加两个子图,并分别绘制对应的曲线。每个子图设置标题、标签、网格、图例等属性。最后,调整布局,可能需要使用plt.tight_layout()或者手动调整位置参数,确保子图不重叠,并显示图形。现在需要检查是否有遗漏的步骤,比如是否正确处理了数据范围,是否每个子图的坐标轴都正确设置,以及样式是否不同。同时,确保使用正确的引用,比如引用[2]和[4]关于fig.add_axes的部分,引用[1]关于subplot的位置参数。可能的问题是如何调整子图的位置和大小,确保它们在一行两列中正确显示。需要计算left和width参数,使得两个子图并排,比如每个子图宽度为0.35,左边距0.1,中间间距0.55-(0.1+0.35)=0.1,这样两个子图之间有0.1的间距。还需要注意,使用fig.add_axes时,每个子图的位置参数是相对于整个figure的,因此需要正确计算。例如,第一个子图left=0.1,width=0.35,第二个子图left=0.55,这样两个子图之间相隔0.1(0.55-0.1 -0.35=0.1),这样它们在画布上并排显示。然后,在代码中分别在这两个axes上绘制平方和自然对数的曲线,设置不同的样式,比如颜色、线型、标记等,确保用户能清楚看到两者的区别。最后,生成相关问题,可能涉及如何调整子图位置、如何共享坐标轴、如何保存图像等。需要根据之前的引用和当前内容提出相关问题。</think>### 使用`plt.axes`和`fig.add_axes`创建一行两列子图的步骤 #### 一、核心方法对比 - **`fig.add_axes()`**:通过绝对定位方式创建子图,需提供四元组参数`[left, bottom, width, height]`,范围在$[0,1]$之间,表示相对于画布的比例[^2][^4] - **`plt.axes()`**:直接在当前图形中添加坐标轴,参数格式与`add_axes()`相同,但更适用于快速定位[^2] #### 二、实现代码示例 ```python import matplotlib.pyplot as plt import numpy as np # 生成输入数据 x = np.linspace(0.1, 10, 100) # 避免ln(0)的数学错误 y_square = x ** 2 y_log = np.log(x) # 创建画布对象 fig = plt.figure(figsize=(10, 4)) # 第一个子图(左):数据与平方关系 ax1 = fig.add_axes([0.1, 0.1, 0.35, 0.8]) # left=10%, bottom=10%, width=35%, height=80% ax1.plot(x, y_square, 'r--', linewidth=2, label='$y = x^2$') ax1.set_xlabel('输入数据') ax1.set_ylabel('平方值') ax1.set_title('平方关系图', fontsize=12) ax1.grid(True, linestyle=':') ax1.legend() # 第二个子图(右):数据与自然对数关系 ax2 = plt.axes([0.55, 0.1, 0.35, 0.8]) # 使用plt.axes创建 ax2.plot(x, y_log, 'b-o', markersize=4, label='$y = \ln(x)$') ax2.set_xlabel('输入数据') ax2.set_ylabel('自然对数值') ax2.set_title('对数关系图', fontsize=12) ax2.grid(True, alpha=0.5) ax2.legend() plt.show() ``` #### 三、关键参数说明 1. **布局控制**: - 左子图参数`[0.1, 0.1, 0.35, 0.8]`表示: - 左边距占画布宽度的10% - 底边距占画布高度的10% - 子图宽度占35% - 子图高度占80% - 右子图通过`0.55`的左边距实现与左子图的间距控制 2. **样式定制**: ```python # 平方图样式 'r--' # 红虚线 linewidth=2 # 线宽加倍 # 对数图样式 'b-o' # 蓝带圆形标记的实线 markersize=4 # 标记尺寸 ``` 3. **数学表达式处理**: - 使用`$\ln(x)$`渲染自然对数公式 - `$y = x^2$`实现平方关系的数学标注 #### 四、可视化效果要点 1. 左图使用线性坐标系展示二次函数增长特性 2. 右图通过半透明网格突出对数函数的渐近特性 3. 通过颜色对比(红 vs 蓝)和线型差异(虚线 vs 实线)强化视觉区分 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值