matplotlib
有没有类似于MATLAB的行扩展的功能?
我基本上是在寻找一种将线段延伸到绘图的方法。我目前的情节是这样的。
在查看了另一个问题并应用了公式之后,我能够将其放到这里,但它看起来仍然很混乱。
这里有人有神奇的公式吗?
我如何设置 的界限axisartist.axis[].line
?
使用普通 API,可以通过以下方式设置轴脊柱的边界:
ax.spines['right'].set_bounds(low=0.01,high=0.1)
Run Code Online (Sandbox Code Playgroud)
但axisartist
没有spines
对象。相反,脊柱线是用 实现的ax.axis['left'].line
,它没有get_bounds
和set_bounds
方法。
例子:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
import seaborn as sns
use_artist = True
x = np.random.random(10)
y = np.random.random(10)
x.sort()
y.sort()
if use_artist:
fig = plt.figure()
ax = fig.add_subplot(axes_class=axisartist.Axes)
else:
fig, ax = plt.subplots()
ax.scatter(x, y, marker="o")
if use_artist:
ax.axis['right'].set_visible(False)
ax.axis['top'].set_visible(False)
# HOW TO SET BOUNDS OF ax.axis['left'].line here?
else:
sns.despine()
ax.spines['left'].set_bounds(ax.get_yticks()[1], ax.get_yticks()[-2])
ax.spines['bottom'].set_bounds(ax.get_xticks()[1], …
Run Code Online (Sandbox Code Playgroud) 我使用以下命令创建一个简单的绘图GLMakie
:
GLMakie.scatter( range((-3e-9+1e-3)..(3e-9+1e-3),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)
结果如下:
看起来 x 轴被严重量化了。该Plots
包可以很好地处理相同的命令:
Plots.scatter( range((-3e-9+1e-3)..(3e-9+1e-3),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)
GLMakie
如果 x 范围以 0 为中心,也可以处理相同的图:
GLMakie.scatter( range((-5e-9)..(5e-9),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?是否GLMakie
使用较小的浮子来提高速度?我可以做些什么来避免这种情况吗?
由于某种原因,使用 Altair 绘图时的 Y 轴似乎是反转的(预计值从绘图的较低(底部)到较高(顶部))。另外,我希望能够更改滴答频率。对于旧版本,我可以使用ticks=n_ticks
,但现在看来这个参数只能采用布尔值。
import altair as alt\nalt.renderers.enable(\'notebook\')\n\neff_metals = pd.read_excel(filename, sheet_name=\'summary_eff_metals\')\npoints = alt.Chart(eff_metals, height=250, width=400).mark_circle().encode(\n x=alt.X(\'Temperature:Q\',axis=alt.Axis(title=\'Temperature (\xc2\xb0C)\'),\n scale=alt.Scale(zero=False, padding=50)),\n y=alt.Y(\'Efficiency:N\',axis=alt.Axis(title=\'Efficiency (%)\'),\n scale=alt.Scale(zero=False, padding=1)),\n color=alt.Color(\'Element:N\'),\n)\ntext = points.mark_text(align=\'right\', dx=0, dy=-5).encode(\n text=\'Element:N\'\n)\nchart = alt.layer(points, text, data=eff_metals, \n width=600, height=300)\nchart\n
Run Code Online (Sandbox Code Playgroud)\n\n 我正在尝试将我的图转换为Seaborn
,但我遇到了多个条形图的问题。数据是列表的列表,如下所示:
raw_data = [[47.66773437098896, 47.585408826566024, 45.426437828641106, 44.955787935926836],
[47.700582993718115, 47.59796443553682, 45.38896827262796, 44.80916093973529],
[47.66563311651776, 47.476571906259835, 45.21460968763448, 44.78683755963528],
[47.248523637295705, 47.42573841363118, 45.52890109500238, 45.10243082784969],
[47.14532745960979, 47.46958795222966, 45.4804195003332, 44.97715435208194],
[46.61620129160194, 47.316775886868584, 45.053032014046366, 44.527497508033704]]
Run Code Online (Sandbox Code Playgroud)
我的简单seaborn脚本如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
def plot_sns(raw_data):
data = np.array(raw_data)
x = np.arange(len(raw_data))
width = 0.2 # width of bar
sns.axes_style('white')
sns.set_style('white')
ax = sns.barplot(x, data[:,0])
Run Code Online (Sandbox Code Playgroud)
我想在图表中并排添加更多条形(每组 4 个条形)。在 Matplotlib 中,我通过绘制右侧间隔的另一个条形来实现这一点,但在 Seaborn 中它不起作用。我看到的所有示例都使用 Pandas 数据框。
我在向绘图中添加对数 X 轴时遇到问题。我想使用方法显示基于样本大小的结果A
,B
并且C
.
我的数据框:
A B C
15 0.733333 0.613333 0.733333
30 0.716667 0.693333 0.766667
59 0.733684 0.678485 0.745763
118 0.796667 0.726087 0.779661
236 0.817862 0.788333 0.838983
470 0.832125 0.814468 0.836170
Run Code Online (Sandbox Code Playgroud)
我正在努力做的事情:
sample_count = np.around(np.logspace(math.log10(15),math.log10(470),6))
sample_count = sample_count.astype(int)
sns.set_style('whitegrid')
g_results=sns.lineplot(data=results,dashes=0,markers=['o','o','o'])
g_results.set(xticks=sample_count)
g_results.set(xscale='log')
Run Code Online (Sandbox Code Playgroud)
然而,结果并不是我真正想要的,因为滴答声完全消失了:
如果没有最后xscale
一行,它看起来像这样,当然这是线性比例,但这次使用正确的刻度:
我想要实现的是这样的:
我很感激你对我的问题的帮助。
我手动创建一个 DataFrame:
import pandas as pd
df_articles1 = pd.DataFrame({'Id' : [4,5,8,9],
'Class':[
{'encourage': 1, 'contacting': 1},
{'cardinality': 16, 'subClassOf': 3},
{'get-13.5.1': 1},
{'cardinality': 12, 'encourage': 1}
]
})
Run Code Online (Sandbox Code Playgroud)
我将其导出到 csv 文件以在拆分后导入:
df_articles1.to_csv(f"""{path}articles_split.csv""", index = False, sep=";")
Run Code Online (Sandbox Code Playgroud)
我可以将其拆分为pd.json_normalize()
:
df_articles1 = pd.json_normalize(df_articles1['Class'])
Run Code Online (Sandbox Code Playgroud)
我将其 csv 文件导入到 DataFrame 中:
df_articles2 = pd.read_csv(f"""{path}articles_split.csv""", sep=";")
Run Code Online (Sandbox Code Playgroud)
但这失败了:
AttributeError: 'str' 对象没有属性 'values' pd.json_normalize(df_articles2['Class'])
我有一个数据框,其中有一列包含整数,我想将其与一列包含字符串值的组合。两列都是对象数据类型。问题是这些列也可能是 NaN。
我找到的解决方案会导致不同的错误或不良结果。
我的数据框如下所示:
指数 | 剂量持续时间单位 | 剂量数量值 | 剂量单位 | 数量值 |
---|---|---|---|---|
0 | 天 | 南 | 南 | 南 |
1 | 天 | 南 | 片剂 | 南 |
2 | 天 | 2 | 南 | 南 |
3 | 天 | 1 | 片剂 | 南 |
4 | 天 | 2 | 片剂 | 南 |
创建数据框的代码:
df = pd.DataFrame([["day",None,None,None],["day",None,"tablet(s)",None],["day",2,"tablet(s)",None],["day",1,"tablet(s)",None],["day",2,"tablet(s)",None]], columns=["dosagedurationunit","dosagequantityvalue","dosagequantityunit","quantityvalue"])
Run Code Online (Sandbox Code Playgroud)
以下答案适用于相同类型(str)的列: Combine pandas string columns with Missing Values
df['DOSE'] = df[['dosagequantityvalue', 'dosagequantityunit']].apply(
lambda x: None if x.isnull().all() else ' '.join(x.dropna()), axis=1)
Run Code Online (Sandbox Code Playgroud)
所需的输出数据帧:
指数 | 剂量持续时间单位 | 剂量数量值 | 剂量单位 | 数量值 | 标准化剂量 |
---|---|---|---|---|---|
0 | 天 | 南 … |
我需要使用Bootstrap 5DIV
将一些s 放入其父容器中,无论它是body
、表cell
还是其他容器div
,如附图所示:
如果DIV
s 数量为偶数,则它们应占据可用宽度的 50%,并在单行中加上 2。或者,如果DIV
s 数量为奇数,则最后一个应占用可用宽度的 100%,而所有先前的仍占用可用宽度的 50%,并按 2 放置在一行中。
最好能够更改DIV
s 顺序(如移动视图示例)。
使用UIKit使用一些简单的代码来实现这一点没有问题,例如
<div class="uk-grid">
<div class="uk-width-large-1-2">DIV 1 takes 50% of available width</div>
<div class="uk-width-large-1-2">DIV 2 takes 50% of available width</div>
<div class="uk-width-large-1-2">DIV 3 takes 100% of available width</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但无论我用 Bootstrap 的文档(以及 Stack Overflow)搜索什么,我仍然找不到解决方案。
css responsive-design twitter-bootstrap getuikit bootstrap-5
我想找到一列的起点和终点并对其进行标记,如下所示:
价值 | 旗帜 |
---|---|
南 | 南 |
南 | 南 |
1 | 开始 |
2 | 南 |
1 | 南 |
3 | 南 |
2 | 停止 |
南 | 南 |
1 | 开始 |
2 | 停止 |