这图怎么画 | 相关分析棒棒糖图

0273174caa714debfe00a0a37c540f18.jpeg

Lollipop

写在前面

【这图怎么画】系列的图都来自VIP群里同学的提问。推文只是对图片的复现,不代表作者对图片展现形式的认同。欢迎同学们在群里分享有意思的图片。

本期图片

2520afa06fa28f61d980c85b9d37e965.png
相关分析棒棒糖图

Title:Integrated Analysis Identifies Four Genes as Novel Diagnostic Biomarkers Which Correlate with Immune Infiltration in Preeclampsia

Doi:https://doi.org/10.1155/2022/2373694

这是一个相关分析结果的展示图。这里作者分别用色阶条以及数值展现了pvalue,用点的大小表示相关系数绝对值。

复现结果

786409a28bed1239ce46482ba71a9791.png
复现结果

稍微调整了一下,原图把p值分层好多段,尤其是>0.05的部分,我觉得意义不大。

示例数据和代码领取

点赞在看 本文,分享至朋友圈集赞25个保留30分钟,截图发至微信mzbj0002领取。

「木舟笔记2022年度VIP可免费领取」

木舟笔记2022年度VIP企划

「权益:」

  1. 「2022」年度木舟笔记所有推文示例数据及代码(「在VIP群里实时更新」)。

    d3fd0351e2cfc528070f0c8075a9f63d.png
    资源合集
  2. 木舟笔记「科研交流群」

  3. 「半价」购买跟着Cell学作图系列合集(免费教程+代码领取)|跟着Cell学作图系列合集

「收费:」

「99¥/人」。可添加微信:mzbj0002 转账,或直接在文末打赏。

496096c2474a8fac1aaff6b0752e8ca0.png

绘图

dat = read.csv("cor.csv")
head(dat)
# 对相关系数和p值转换为分类变量
dat$cor1 <- cut(abs(dat$cor),# 绝对值
                breaks = c(0, 0.3, 0.5, 0.7, 0.9, 1),
                labels = c("< 0.3","0.3 - 0.5","0.5 - 0.7","0.7 - 0.9","> 0.9"),
                right=FALSE) # right=FALSE表示表示区间为左闭右开
dat$pvalue1 <- cut(dat$pvalue,
                breaks = c(0, 0.001, 0.01, 0.05, 1),
                labels = c("< 0.001","< 0.01","< 0.05","> 0.05"),
                right=FALSE) 
# 排序
dat = dat[order(dat$cor),]
dat$Cell = factor(dat$Cell, levels = dat$Cell)
p = ggplot(dat, aes(x = cor, y = Cell, color = pvalue1)) +
  scale_color_manual(name="pvalue",
                     values = c("#E69F00", "#56B4E9", "#009E73", "gray"))+
  geom_segment(aes(x = 0, y = Cell, xend = cor, yend = Cell),size = 1) +
  geom_point(aes(size = cor1))+
  theme_bw()+
  labs(size = "Cor")
p

## 添加p值
dat$pvalue2 <- cut(dat$pvalue,
                   breaks = c(0, 0.05,1),
                   labels = c("< 0.05","> 0.05"),
                   right=FALSE) 
p1 = ggplot()+
  geom_text(dat,mapping = aes(x = 0, y = Cell, color = pvalue2, 
                              label = round(pvalue,3)))+
  scale_color_manual(name="",
                     values = c("red", "black"))+
  theme_void()+
  guides(color=F)
  
p1
library(patchwork)
p|p1

ggsave("lollipop.pdf",width = 8,height = 5)
f0961fe7730752ad9c0bf6c37ce50d2e.png
result

后续在AI里调整一下位置即可~当然用基础函数或其他办法也能够直接画出来,这里我就不想了,有更好的办法的同学可以私信我。

往期内容

  1. (免费教程+代码领取)|跟着Cell学作图系列合集

  2. Q&A | 如何在论文中画出漂亮的插图?

  3. 跟着 Cell 学作图 | 桑葚图(ggalluvial)

  4. R实战 | Lasso回归模型建立及变量筛选

  5. 跟着 NC 学作图 | 互作网络图进阶(蛋白+富集通路)(Cytoscape)

  6. R实战 | 给聚类加个圈圈(ggunchull)

  7. R实战 | NGS数据时间序列分析(maSigPro)

  8. 跟着 Cell 学作图 | 韦恩图(ggVennDiagram)


c6ee9df64a128a14826c45fdd1019cdc.png
木舟笔记矩阵
<think>好的,我现在需要帮用户解决如何绘制药品销售控制类的问题。首先,用户提到的“类包”可能是指包(Package Diagram)或者类(Class Diagram),不过结合“药品销售控制”这个上下文,更可能是指类,因为类用于描述系统中的类及其关系,而包更多是组织代码结构。不过也有可能用户确实需要包,所以我得先确认这一点。 接下来,我需要回忆UML中包和类的区别。包用于展示系统模块的划分,比如不同的子系统或模块如何组织成包,以及包之间的依赖关系。而类则是描述系统中的类、接口、属性、方法以及它们之间的关系。药品销售控制系统的类可能包括药品类、订单类、库存类、销售记录类等,而包可能会分为销售模块、库存模块、用户管理模块等。 但用户明确提到的是“类包”,这可能是一个混合概念,或者用户可能混淆了术语。这时候,我需要考虑用户可能实际需要的是类,或者是包和类的结合。例如,先用包划分模块,再在每个包下绘制。这种情况下,可能需要分步骤说明。 假设用户需要的是类,那么步骤可能包括确定类、识别属性方法、确定关系等。例如,药品类可能有药品编号、名称、价格、库存量等属性,以及更新库存的方法。订单类可能包括订单号、客户信息、药品列表、总金额等,以及生成订单的方法。库存类可能管理库存的增减,销售记录类记录销售详情。 然后,需要确定这些类之间的关系,比如订单类与药品类之间的关联,可能是一对多,因为一个订单可以包含多个药品。库存类与药品类之间可能有聚合关系,因为库存管理多个药品的库存量。此外,可能需要考虑继承或接口,比如用户类分为普通用户和管理员,但药品销售系统可能不需要复杂的继承结构。 如果用户需要的是包,那么需要将系统划分为不同的包,比如销售包、库存包、用户包、报表包等,每个包内包含相关的类,包之间用依赖关系连接,比如销售包依赖库存包来检查库存。 在绘制步骤方面,无论是包还是类,通常的步骤包括:确定系统模块或类,定义它们之间的关系,选择合适的工具(如StarUML、Visio、PlantUML等),然后按照UML规范绘制。 另外,用户可能希望了解一些具体示例,比如类的命名、关系的类型(关联、聚合、组合、继承、依赖等),以及如何正确使用箭头符号。例如,关联关系用实线箭头,聚合用空心菱形,依赖用虚线箭头等。 还需要注意LaTeX格式的问题,用户要求所有行内数学表达式用$...$,独立公式用$$...$$。不过在回答中可能涉及较少的数学公式,更多是UML元素,但如果有需要,比如描述库存计算公式,可能需要用LaTeX表达,例如库存变化公式:$库存_{新} = 库存_{旧} - 销量$。 最后,确保回答结构清晰,分步骤说明,可能需要先澄清用户的需求,但根据问题描述,用户可能已经明确需要类包,所以可能需要结合包和类绘制方法,或者以类为主,辅以包的划分。 总结下来,可能的回答结构是:首先明确类包的定义,然后分步骤说明如何绘制,包括确定模块/类、绘制、组织成包、添加关系、使用工具等,并给出示例和注意事项。</think>药品销售控制系统类包绘制需结合包(Package Diagram)与类(Class Diagram),通过模块化分层展现系统结构。以下是详细步骤说明: --- ### **一、需求分析与模块划分** 1. **明确系统功能** - 核心功能:药品信息管理、库存控制、订单处理、销售记录、权限控制等。 - 例如:药品需包含属性$药品编号$, $名称$, $价格$, $库存量$;订单需记录$订单号$, $客户信息$, $总金额$等。 2. **划分功能包(Package)** 将系统分为逻辑模块,每个包对应一个子系统: - `药品管理包`:管理药品基本信息。 - `库存控制包`:处理入库、出库、库存预警。 - `销售处理包`:生成订单、计算金额。 - `用户权限包`:区分管理员与普通用户角色。 --- ### **二、绘制(Class Diagram)** 在每个包内定义类及其关系,使用$$...$$标注独立公式: 1. **药品管理包** - **类名**:`药品类(Drug)` - **属性** - `drugID: String` - `price: Double` - `stock: Integer` - **方法** - `updateStock(quantity: Integer): Boolean` - **关联关系** - `药品类`与`库存控制包`中的`库存类`通过关联实现库存更新: $$药品类 \rightarrow 库存类$$ 2. **库存控制包** - **类名**:`库存类(Inventory)` - **属性** - `threshold: Integer`(库存预警阈值) - **方法** - `checkStock(): Boolean` - `alertLowStock(): void` - **依赖关系** - 依赖`药品管理包`获取库存数据: $$库存类 \dashrightarrow 药品类$$ 3. **销售处理包** - **类名**:`订单类(Order)` - **属性** - `orderID: String` - `totalAmount: Double` - **方法** - `calculateTotal(): Double`(公式:$$总金额 = \sum_{i=1}^n (单价_i \times 数量_i)$$) - **组合关系** - `订单类`包含多个`药品类`实例:用**实心菱形箭头**表示: $$订单类 \diamond 药品类$$ --- ### **三、整合为包(Package Diagram)** 1. **包间依赖关系** - `销售处理包`依赖`库存控制包`检查库存是否充足。 - `用户权限包`为其他包提供权限验证接口。 2. **示规范** - **包**:用文件夹标表示,标注包名。 - **依赖**:用**虚线箭头**从依赖方指向被依赖方。 - **接口**:用棒棒糖符号(◯)表示服务接口。 --- ### **四、工具与示例** 1. **推荐工具** - **Visual Paradigm**:支持拖拽式绘制UML。 - **PlantUML**:通过代码生成形,适合自动化场景。 - **Lucidchart**:在线协作工具,提供UML模板。 2. **简略示例代码(PlantUML)** ```plantuml @startuml package "药品管理包" { class Drug { +drugID: String +price: Double +stock: Integer +updateStock(): Boolean } } package "库存控制包" { class Inventory { +threshold: Integer +checkStock(): Boolean } } Drug --> Inventory : 更新库存 @enduml ``` --- ### **五、注意事项** 1. **命名规范**:类名使用帕斯卡命名法(如`OrderHandler`)。 2. **关系准确性**:区分关联、依赖、组合(如订单与药品是组合,库存与药品是关联)。 3. **层级清晰**:包需体现模块间松耦合,避免循环依赖。 通过以上步骤,可系统化绘制药品销售控制系统的类包,确保设计符合实际业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值