标签: scatter-plot

在斑点密集的区域上,alpha 仍然不透明的散点图

我有一个散点图,它从两个不同的数据集中绘制大量的点。在某些区域,存在大量的点,因此即使具有非常低的 alpha(例如 alpha=0.1),您也无法看穿质量。但在该 alpha 值下,您几乎看不到稀疏区域中的点。有没有一种方法可以限制堆叠点的 alpha 值,或者以某种方式使背景在密集区域下可见,同时不洗掉稀疏区域?

代码片段如下所示:

# Code to populate the datasets not included.
fig, ax = plt.subplots()
ax.scatter(x1, y1, s=12, color='red')
ax.scatter(x2, y2, s=12, color='blue', alpha=0.1)
# Plus code to do xlabels and such not included.
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此输入图像描述

正如您所看到的,很难看到底部红色腿的边界,但仍然使顶部蓝色腿打出。

有什么办法可以创造出这样的效果吗?

提前致谢。

编辑

一个好的建议似乎是使用 hexbin 而不是 scatter。这看起来确实很有希望,但颜色仍然不能很好地混合。例如,

ax.hexbin(x1, y1, cmap='Reds', mincnt=1, vmax=100)
ax.hexbin(x2, y2, cmap='Blues', mincnt=1, vmax=50, alpha=0.8, linewidths=0)
Run Code Online (Sandbox Code Playgroud)

产量:

在此输入图像描述

如果能让蓝色和红色融合在一起,那就太好了。也许每个像素可以有一个来自一个数据集的 R 值,以及来自另一个数据集的 B 值或其他值?但在 hexbin 中似乎不是一个选项。

编辑

应用托马西洛的答案后:

在此输入图像描述

谢谢,我觉得比原版好看。

python alpha matplotlib scatter-plot

5
推荐指数
1
解决办法
2402
查看次数

Pandas 散点图分类轴和时间序列轴

我正在寻找创建一个非常类似于 nltk 的词汇分散图的图表,但我对如何构建它画了一个空白。我认为分散将是我最好的几何图形,使用“|” 作为标记,并设置 alpha,但我在设置参数时遇到了各种问题。下面是一个例子:

在此输入图像描述

我在 5 年的时间内用日期时间索引 freq='D' 排列了数据框,每列代表该日期使用的特定单词的计数。例如:

tst = pd.DataFrame(index=pd.date_range(datetime.datetime(2010, 1, 1), end=datetime.datetime(2010, 2, 1), freq='D'), data=[[randint(0, 5), randint(0, 1), randint(0, 2)] for x in range(32)])
Run Code Online (Sandbox Code Playgroud)

目前我正在尝试类似以下内容:

plt.figure()
tst.plot(kind='scatter', x=tst.index, y=tst.columns, marker='|', color=sns.xkcd_rgb['dodger blue'], alpha=.05, legend=False)
yticks = plt.yticks()[0]
plt.yticks(yticks, top_words)
Run Code Online (Sandbox Code Playgroud)

上面的代码产生一个KeyError:

KeyError: "['2009-12-31T19:00:00.000000000-0500' '2010-01-01T19:00:00.000000000-0500'\n '2010-01-02T19:00:00.000000000-0500' '2010-01-03T19:00:00.000000000-0500'\n '2010-01-04T19:00:00.000000000-0500' '2010-01-05T19:00:00.000000000-0500'\n '2010-01-06T19:00:00.000000000-0500' '2010-01-07T19:00:00.000000000-0500'\n '2010-01-08T19:00:00.000000000-0500' '2010-01-09T19:00:00.000000000-0500'\n '2010-01-10T19:00:00.000000000-0500' '2010-01-11T19:00:00.000000000-0500'\n '2010-01-12T19:00:00.000000000-0500' '2010-01-13T19:00:00.000000000-0500'\n '2010-01-14T19:00:00.000000000-0500' '2010-01-15T19:00:00.000000000-0500'\n '2010-01-16T19:00:00.000000000-0500' '2010-01-17T19:00:00.000000000-0500'\n '2010-01-18T19:00:00.000000000-0500' '2010-01-19T19:00:00.000000000-0500'\n '2010-01-20T19:00:00.000000000-0500' '2010-01-21T19:00:00.000000000-0500'\n '2010-01-22T19:00:00.000000000-0500' '2010-01-23T19:00:00.000000000-0500'\n '2010-01-24T19:00:00.000000000-0500' '2010-01-25T19:00:00.000000000-0500'\n '2010-01-26T19:00:00.000000000-0500' '2010-01-27T19:00:00.000000000-0500'\n '2010-01-28T19:00:00.000000000-0500' '2010-01-29T19:00:00.000000000-0500'\n '2010-01-30T19:00:00.000000000-0500' '2010-01-31T19:00:00.000000000-0500'] not in …
Run Code Online (Sandbox Code Playgroud)

matplotlib scatter-plot pandas timeserieschart categorical-data

5
推荐指数
1
解决办法
4770
查看次数

带有 chart.js 的时间散点图

我正在尝试在 (x,y) 数据的 chart.js 中呈现散点图,其中 x 是日期字符串。我在网上看到了很多示例和教程,其中讲师使用函数为示例图表生成时间戳,但我还没有找到任何使用可能收集的真实数据的示例。

我有看起来像这样的数据(从 cron 收集):

2017-07-08T06:15:02-0600,23.375
2017-07-08T06:20:02-0600,23.312
2017-07-08T06:25:02-0600,23.312
2017-07-08T06:30:02-0600,23.25
Run Code Online (Sandbox Code Playgroud)

我在chart.js中尝试了这样的数据(数据字符串周围有和没有“引号”):

data: [{
  x: 2017-07-08T06:15:02-0600,
  y: 23.375
},{
  x: 2017-07-08T06:20:02-0600,
  y: 23.312
},{
  x: 2017-07-08T06:25:02-0600,
  y: 23.312
},{
  x: 2017-07-08T06:30:02-0600,
  y: 23.25
Run Code Online (Sandbox Code Playgroud)

}],

什么都不渲染。我究竟做错了什么?

javascript time scatter-plot chart.js

5
推荐指数
3
解决办法
5369
查看次数

避免在 ggplot2 中重叠 geom_point 和 geom_text

如何避免 ggplot2 中的这两层重叠?我尝试显示文本,以便它们不会位于点上方。

check_overlap 在避免文本与自身重叠但不与其他图层重叠方面做得很好。

我也尝试过 library geom_text_repel,但是这个 library 不支持check_overlap并显示每个数据点的文本。

但我不需要每个点都有文字,就像check_overlap那样。

ggplot(dat, aes(x = CPI, y = HDI)) +
  geom_point(aes(color = Region), shape=21, size=4, position = "identity") +
  geom_text(data = dat, aes(label = Country), size=4, check_overlap = TRUE)
Run Code Online (Sandbox Code Playgroud)

r scatter-plot ggplot2 geom-text

5
推荐指数
1
解决办法
6668
查看次数

(matplotlib.pyplot) 散点图轴顺序错误

我正在关注这个线性回归示例,但我的结果与应有的不同。问题出在情节轴上,它们没有顺序。

预期的:

在此处输入图片说明

我的结果:

在此处输入图片说明

缩放以查看轴:

在此处输入图片说明

编码:

import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt

#read data
dataframe = pd.read_fwf('brain_body.txt')
x_values = dataframe[['Brain']]
y_values = dataframe[['Body']]

#train model on data
body_reg = linear_model.LinearRegression()
body_reg.fit(x_values, y_values)

#visualize results
plt.scatter(x_values, y_values)
plt.plot(x_values, body_reg.predict(x_values))
plt.show()
Run Code Online (Sandbox Code Playgroud)

脑体.txt

Brain        Body
    3.385    44.500
    0.480    15.500
    1.350     8.100
  465.000   423.000
   36.330   119.500
   27.660   115.000
   14.830    98.200
    1.040     5.500
    4.190    58.000
    0.425     6.400
    0.101     4.000
    0.920     5.700
    1.000     6.600
    0.005     0.140
    0.060     1.000
    3.500 …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib scatter-plot

5
推荐指数
1
解决办法
6569
查看次数

seaborn 中的自定义调色板

我有一个散点图,它应该显示键长随温度的变化。我想给每个温度一个特定的颜色,但它似乎不起作用 - plot 使用默认的 seaborn 调色板。有没有办法将温度映射到颜色,并让 seaborn 使用它?

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

palette = ["#090364", "#091e75", "#093885", "#085396", "#086da6", 
           "#0888b7", "#08a2c7", "#07bdd8", "#07d7e8", "#07f2f9", 
           "#f9ac07", "#c77406", "#963b04", "#640303"]

sns.set_style("whitegrid")
sns.set_palette(palette)
plot = sns.scatterplot(df.loc[:,'length'], 
                       df.loc[:,'type'],
                       hue = df.loc[:,'temperature'],
                       legend = False, 
                       s = 200)
Run Code Online (Sandbox Code Playgroud)

python scatter-plot color-palette python-3.x seaborn

5
推荐指数
1
解决办法
3385
查看次数

如何使用 ggplot2 在 y 轴截距(y 轴)上添加一个点

我有一个散点图,其中 y 轴缩放比例在某个点发生变化以绘制具有某些极值的数据。我正在尝试在 y 轴上添加某种视觉提示,指示缩放在该点发生变化。

这是一个情节的例子

library(scales)
library(ggplot2)

set.seed(104)

ggdata <- data.frame('x' = rep('a',100),
                     'y' = c(runif(90, 0, 20), runif(10, 90, 100)))

transformation <- trans_new(
  "my_transformation", 
  transform = function(x) ifelse(x <= 30, x / 5, (x - 30) / 20 + 30 / 5),
  inverse = function(x) ifelse(x <= 30 / 5, x * 5, (x - 30 / 5) * 20 + 30)
)

ggplot(data = ggdata) + 
  geom_jitter(aes(x = x, y = y)) +
  scale_y_continuous(trans = transformation, breaks …
Run Code Online (Sandbox Code Playgroud)

plot r data-visualization scatter-plot ggplot2

5
推荐指数
1
解决办法
755
查看次数

尝试将颜色条添加到 Seaborn 散点图

我是一名地质学硕士生,正在撰写我的论文,重点是南太平洋一些火山的二氧化硫输出。我对 R 有一点经验,但我的主管推荐使用 python(特别是 JupyterLab)来生成图形和数据操作,所以我对编程还很陌生,而且基本上是在自学。我正在尝试使用地震数据使用 seaborn 生成一些散点图,但我似乎无法在图例中显示地震震级的颜色条。我正在使用的代码如下,我会尽我所能以清晰的方式对其进行格式化。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy import stats
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
Run Code Online (Sandbox Code Playgroud)

然后是我正在使用的数据集。这些是地震数据的集合。

df = pd.read_csv('Vanuatu Earthquakes May18-May19.csv')
df = pd.read_csv('Vanuatu Earthquakes May17-May18.csv')
df = pd.read_csv('Vanuatu Earthquakes May19-Jul20.csv')
Run Code Online (Sandbox Code Playgroud)

和火山的位置,纯粹是为了空间参考。

dg = pd.read_csv('Volcano coordinates.csv')
Run Code Online (Sandbox Code Playgroud)

这是我目前尝试处理的主要情节。到目前为止,我已经能够使用色调函数对地震的震级进行分类,但我不喜欢它在图例中的外观,并希望将其转换为颜色条(或使用颜色条代替色调,或者/或) ,除了我不太清楚如何做到这一点。或者,如果有一个不同的函数可以给我我正在寻找的结果,我绝对愿意接受它而不是散点图。黑色三角形也是火山,所以现在可以忽略它们。

plt.figure(figsize=(5.5,9))
sns.scatterplot(x='longitude', y='latitude', data=df, 
                marker='D', hue='mag', palette='colorblind', cmap='RdBu')
sns.scatterplot(x='longitude', y='latitude', data=dg, 
                marker='^', legend='brief', color='k', s=100)
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib scatter-plot seaborn colormap

5
推荐指数
1
解决办法
4138
查看次数

如何使用数据集(nd.array)在散点图中对误差条(x 和 y)进行颜色映射?

我正在尝试创建一个带有 x 和 y 误差的散点图,它们在四个部分中具有不同的标记和误差条颜色(例如,x=0 到 x=2 的红色,x=2 到 c=5 的蓝色等)。我使用了带有标记边界的颜色图,但我无法对错误栏做类似的事情。我尝试使用this answer to a similar question将标记、错误栏和大写字母设置为散点颜色图中的相同颜色,但我无法让它为我的代码工作(出现了一个关于数据长度不匹配或无法转换为元组)。我想我无法为我用于标记的颜色图正确修改它,或者这不是获得正确结果的最佳方法。

这是一个包含一些虚构数据的示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

bounds = [0,1.5,3,4.5,5]
colors = ["r", "b", "g", "y"]
cmap = matplotlib.colors.ListedColormap(colors)
norm = matplotlib.colors.BoundaryNorm(bounds, len(colors))

x = np.array([0.0, 0.0, 1.0, 2.0, 2.0, 3.0,  4.0,  4.0, 5.0, 5.0])
y = np.array([0.0, 0.1, 0.8, 0.9, 0.7, 0.1, -0.8, -0.5, -1.0, -0.7])
x_err = np.array([0.05, 0.06, 0.04, 0.045, 0.04, 0.06, 0.05, 0.055, 0.02, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib scatter-plot color-mapping

5
推荐指数
1
解决办法
108
查看次数

Plotly:创建具有分类 x 轴抖动和多级轴的 Scatter

我想制作一个多级 x 轴的图形,如下图所示: 多层次分散

import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(
  go.Scatter(
    x = [df['x'], df['x1']],
    y = df['y'],
    mode='markers'
  )
)
Run Code Online (Sandbox Code Playgroud)

但我也想将抖动放在 x 轴上,如下图所示: 在此处输入图片说明

到目前为止,我可以使用下一个代码独立制作每个图形:

import plotly.express as px
fig = px.strip(df,
               x=[df["x"], df['x1']], 
               y="y",
               stripmode='overlay') 
Run Code Online (Sandbox Code Playgroud)

是否可以将抖动和多级轴组合在一个图中?

这是重现数据集的代码:

import numpy as np
import pandas as pd
import random

'''Create DataFrame'''
price = np.append(
  np.random.normal(20, 5, size=(1, 50)), np.random.normal(40, 2, size=(1, 10))
)
quantity = np.append(
  np.random.randint(1, 5, size=(50)), np.random.randint(8, 12, size=(10))
)

firstLayerList = ['15 in', '16 in']
secondLayerList …
Run Code Online (Sandbox Code Playgroud)

python graph scatter-plot plotly jitter

5
推荐指数
1
解决办法
1831
查看次数