天道酬勤,学无止境

data-visualization

Matplotlib : quiver 和 imshow 叠加,如何设置两个颜色条?(Matplotlib : quiver and imshow superimposed, how can I set two colorbars?)

问题 我有一个图形,它由imshow()显示的图像、轮廓和由quiver()设置的矢量场组成。 我根据另一个标量对矢量场进行了着色。 在我的图的右边,我做了一个colorbar() 。 这个colorbar()代表imshow()显示的值imshow()在我的例子中可以是正数和负数)。 我想知道如何设置另一个颜色条,该颜色条将基于向量颜色所基于的标量的值。 有谁知道这是怎么做到的吗? 这是我能够制作的图像的示例。 请注意,向量的颜色从蓝色变为红色。 根据当前的颜色条,蓝色表示否定。 但是我知道向量颜色表示的数量总是正的。 回答1 只需在每次绘图调用后立即调用colorbar两次。 Pylab 将创建一个与最新图匹配的新颜色条。 请注意,在您的示例中,颤抖值的范围为 0,1,而 imshow 取负值。 为清楚起见(本示例中未显示),我将使用不同的颜色图来区分两种类型的图。 import numpy as np import pylab as plt # Create some sample data dx = np.linspace(0,1,20) X,Y = np.meshgrid(dx,dx) Z = X**2 - Y Z2 = X plt.imshow(Z) plt.colorbar() plt.quiver(X,Y,Z2,width=.01,linewidth=1) plt

2021-12-08 22:26:17    分类:技术分享    python   matplotlib   visualization   data-visualization   colorbar

将集合层次结构可视化为彩色编码图(Visualizing set hierarchies as color coded graphs)

问题 我最近阅读了很多关于 Java 和 Javascript 图形库的书,但我还没有找到做我想做的事情的好方法。 基本上,我有一个关于一堆元素(最多几千个)的集合层次结构。 这些集合可以完全或部分重叠、完全覆盖或彼此完全不相交。 我想做的是显示以下信息: 集合的大小(相对于其他集合) 从它覆盖的元素计算出的集合的“热”值(以颜色代码表示) 单个图形中集合的完整拓扑(以便向用户显示重叠、交叉等) 编辑:也许我应该举一个例子来说明我所说的集合和元素以及部分重叠的层次结构。 以下是我处理的那种集合的过度简化版本(请注意,数字1 - 10和字母a - h和X表示可相互比较的元素): Set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} Set2 = {1, 2, 3, 4, 5, 6} Set3 = {1, 2, 3} Set4 = {1, 4, 5, 6, 7} Set5 = {a, b, c, d, e, f, g, h} Set6 = {a, b, c, d, e} Set7 = {a, b, c, 7} Set8 = {2, 4, 7, 8, c, f} Set9 = {X} 我不确定如何以直观的方式显示这些信息。 我看过我在视觉上非常喜欢的 Voronoi ¹,² 图形,但是它们具有不同的数学背景,所以我认为我无法以适当的方式描绘我的层次结构。

2021-12-08 18:33:55    分类:技术分享    java   javascript   data-visualization   graph-algorithm

R:绘制大于原始数据的轴显示值(R: Plot Axis Display Values Larger than the Original Data)

问题 我正在使用 R 编程语言。 我正在关注有关数据可视化的教程:https://plotly.com/r/3d-surface-plots/ 我创建了自己的数据并绘制了 3D 图: library(plotly) set.seed(123) #generate data a = rnorm(100,10,10) b = rnorm(100,5,5) c = rnorm(100,5,10) d = data.frame(a,b,c) #3d plot fig <- plot_ly(z = ~as.matrix(d)) fig <- fig %>% add_surface() #view plot fig 如此处所见,此 3D 图中有一个点为“y = 97”。 我不确定这是怎么可能的,看到原始数据框“d”中的任何值都没有接近 97。我通过查看原始数据框“d”中每个变量的单独分布来确定这一点”: #plot individual densities plot(density(d$a), main = "density plots", col = "red") lines(density(d$b), col = "blue") lines(density(d$c), col = "green") legend( "topleft", c("a", "b", "c"), text.col

2021-12-06 22:08:46    分类:技术分享    r   3d   plotly   data-visualization

R:二元运算符的非数字参数(R: non-numeric arguments to binary operators)

问题 我正在使用 R 编程语言。 我正在尝试使用一些假数据制作“平行坐标图”: library(MASS) a = rnorm(100, 10, 10) b = rnorm(100, 10, 5) c = rnorm(100, 5, 10) d = matrix(a, b, c) parcoord(d[, c(3, 1, 2)], col = 1 + (0:149) %/% 50) 但是,当我尝试将数字变量和因子变量混合在一起时会出现问题: group <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) ) d = matrix(a,b, group) parcoord(d[, c(3, 1, 2)], col = 1 + (0:149) %/% 50) Error in x - min(x, na.rm = TRUE): non-numeric argument to binary operator 我只是好奇。 这个问题能解决吗? 或者根本不可能同时使用数字和因子变量来制作这样的图? 我在这里看到了以前的 stackoverflow 帖子,其中使用数字和因子变量绘制了类似的图:如何在 R 中绘制具有多个分类变量的平行坐标 但是,我使用的计算机没有 USB 端口或互联网访问权限 -

2021-12-06 20:50:33    分类:技术分享    r   plot   data-visualization   data-manipulation

用于科学分子动力学模型的 3D 可视化软件(3D visualization software for scientific molecular dynamics model)

问题 我正在编写一个程序来可视化分子动力学实验。 输入将是一个文件,其中包含每个时间步的每个原子的位置。 将有~100k 个原子和~500 个时间步长。 原子将表示为球体。 原子之间的连接将由圆柱体表示。 以下是该计划的一些要求(按重要性排序): 能够移动、旋转和缩放以更改图像从不同时间步长的位置制作电影的能力能够用鼠标选择一个原子创建 GUI 的能力易于在 Mac、Windows 和 Linux 上安装。 任何人都可以推荐一种语言、可视化库或方法来解决这个问题吗? 任何其他想法也将不胜感激。 回答1 我建议考虑 ParaView; 您需要做的是以 VTK 格式保存所有相关数据(该库具有相应的功能),然后您就完成了。 它具有出色的后处理能力(如着色、透明粒子、动画)并经过充分测试。 如果这对您来说似乎不够灵活,我对c++ lib QGLViewer 有一些经验(不要被.com混淆,它是免费且跨平台的)。 您需要自己为粒子编写OpenGL代码,这很容易。 也就是说,我知道有几个“场景图引擎”,它们可能对您有很大帮助,但我认为其他人会更好地评论,因为我从未使用过它们。 仅供参考,这部电影是用 Paraview 完成的(你肯定会找到更多的例子),而这里的东西来自带有 QGLViewer 的 OpenGL。 回答2 嗯,我认为对于 10 万个原子来说,球体会过于重叠——你只会看到边缘。

2021-12-06 17:07:39    分类:技术分享    3d   data-visualization

如何使用某些条件过滤器找出 users_id(how to Find out users_id with some conditions filter)

问题 我有一张这样的桌子 order_id | user_id | createdAt | transaction_amount order_id为交易id,user_id为用户,createdAt为日期,transaction_amount为每个id订单的交易。 所以在画面上,我想找出时间范围“2020-01-01”到“2020-01-31”有两个条件的用户 用户在范围 ('2020-01-31') 的最后一个日期之前进行交易,并且至少进行了 1 笔以上的交易并且用户在日期范围内至少进行了 1 次交易(“2020-01-01”到“2020-01-31”) 在 mysql 上,可以使用此查询来描述条件 HAVING SUM(createdAt <= '2020-01-31') > 1 AND SUM(createdAt BETWEEN '2020-01-01' AND '2020-01-31') 在画面上我做了这个 [![在此处输入图像描述][1]][1] 在第一个过滤器 (createdAt) 上,我在第二个过滤器 (createdAt 副本) 上创建了日期范围 ('2020-01-01' 到 '2020-01-31') 我在最后一个范围之前创建了范围 ( < '2020-01-31' ) 在过滤器 CNTD(user_id) 上,我将计数设置为至少 1。 所以它出现 2223

2021-12-06 16:08:25    分类:技术分享    data-visualization   tableau-api

seaborn:选择的 KDE 带宽为 0。无法估计密度(seaborn: Selected KDE bandwidth is 0. Cannot estimate density)

问题 import pandas as pd import seaborn as sns ser_test = pd.Series([1,0,1,4,6,0,6,5,1,3,2,5,1]) sns.kdeplot(ser_test, cumulative=True) 上面的代码生成以下 CDF 图: 但是当系列的元素被修改为: ser_test = pd.Series([1,0,1,1,6,0,6,1,1,0,2,1,1]) sns.kdeplot(ser_test, cumulative=True) 我收到以下错误: ValueError: 无法将字符串转换为浮点数:'scott' 运行时错误:选定的 KDE 带宽为 0。无法估计密度。 这个错误是什么意思,我如何解决它以生成 CDF(即使它非常倾斜)。 编辑:我使用的是 seaborn 0.9.0 版 完整的跟踪如下: ValueError: could not convert string to float: 'scott' During handling of the above exception, another exception occurred: RuntimeError Traceback (most recent call last) <ipython-input-93-7cee594b4526> in

2021-12-05 17:58:42    分类:技术分享    python   pandas   data-visualization   seaborn   kernel-density

图例出现在页面中错误的位置 (R):未完全显示(Legend is apears in the wrong place in the page (R): not fully shown)

问题 我已将以下命令添加到 R 中的绘图中: df<- read.table("filename.csv", header=TRUE, sep=",", stringsAsFactors=FALSE) tdf=as.data.frame(df[2:ncol(df)]) # draw the plot bb<- barplot(as.matrix(tdf), beside=T , col=colours,border="black", ylim=c(0,100), ylab="Percentage (%)",xlab="Methods)") y<-as.matrix(tdf) text(bb,y+2,labels=as.character(y),pos =1,offset=3,cex = 0.6, col = "black") legend("topleft", c("M1","M2","M3","M4","M5", "M6"), cex=0.6,inset=c(1,0),xpd=TRUE, fill=colours) 然而,图例出现在情节之外并没有完全显示, 我希望它在情节的右侧之外被看到。 我不明白这里的定位 回答1 如果您在更改title功能"topleft"到"topright"和删除inset的说法,你的标题应该是指示确定。 请看下面的代码: # simulation

2021-12-05 03:59:59    分类:技术分享    r   data-visualization   legend

由线连接的条形图/如何在 R/ggplot2 中连接用 grid.arrange 排列的两个图形(Bar charts connected by lines / How to connect two graphs arranged with grid.arrange in R / ggplot2)

问题 在 Facebook 研究中,我发现了这些漂亮的条形图,这些条形图由线条连接起来以指示排名变化: https://research.fb.com/do-jobs-run-in-families/ 我想使用 ggplot2 创建它们。 条形图部分很简单: library(ggplot2) library(ggpubr) state1 <- data.frame(state=c(rep("ALABAMA",3), rep("CALIFORNIA",3)), value=c(61,94,27,10,30,77), type=rep(c("state","local","fed"),2), cumSum=c(rep(182,3), rep(117,3))) state2 <- data.frame(state=c(rep("ALABAMA",3), rep("CALIFORNIA",3)), value=c(10,30,7,61,94,27), type=rep(c("state","local","fed"),2), cumSum=c(rep(117,3), rep(182,3))) fill <- c("#40b8d0", "#b2d183", "#F9756D") p1 <- ggplot(data = state1) + geom_bar(aes(x = reorder

2021-12-03 13:19:56    分类:技术分享    r   ggplot2   bar-chart   data-visualization   r-grid

如何归一化雷达图的统计数据(how to normalize statistics for a radar chart)

问题 我正在使用 raphaelJS 绘制“雷达图”来显示统计数据。 对于每个轴,它应该接受 0 到 10 之间的值。 例如,中心点正好位于图表中心的多边形的值 [10,10,10,10,10]。 简单的... 但是,可能会发生数据如下所示: [26, 14, 48, 18, 1], [ 3, 14, 8, 9, 5], [10, 6, 4, 16, 3] 这导致了这个(显示中心点在图表左下角的多边形): 如果我根据其最大值(在本例中为 48)对数据进行标准化,则所有其他中心点都将离图表中心太近,并且其信息值将在 0 左右。 相同数据根据其最大值标准化: [5.42, 2.92, 10, 3.75, 0.21], [0.63, 2.92, 1.67, 1.88, 1.04], [2.08, 1.25, 0.83, 3.34, 0.63] 所以现在所有其他中心点都聚集在图表的中心,并且失去了所有的解释力……如果中心点超过3个,它们很可能会相互重叠。 我正在考虑一种显示每个多边形的相对方式,如果可能的话,不会丢失每个多边形之间的太多关系...... 任何想法如何做到这一点,或者可能是另一种如何规范化的方法? 回答1 正如@daroczig 所建议的那样,数据的对数转换是要走的路。 我只想补充一点,您可以执行多种类型的转换。 也许一个例子可能会对此有所帮助。

2021-12-03 00:30:13    分类:技术分享    statistics   charts   raphael   scale   data-visualization