我试图在图表区域之外得到我的图表的图例.
这是边距:
var margin = {top: 50, right: 200, bottom: 50, left: 40};
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
Run Code Online (Sandbox Code Playgroud)
首先我创建svg:
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
Run Code Online (Sandbox Code Playgroud)
所以,根据我的理解,我现在拥有svg canvas元素和其中包含图表的ag.我试图在右边距添加更多,所以我可以在svg画布和附加到它的g之间获得一些空间,它保存图表.然后我想把我的传说放在那个空旷的空间里.
这是我添加传奇的地方:
//add legend
var legend = svg.append("g")
.attr("class", "legend")
.attr("height", 300)
.attr("width", 200)
.attr("transform", "translate(-1000,50");
Run Code Online (Sandbox Code Playgroud)
即使我附加到SVG元素,它也会附加到svg元素中的g.因此,无论我翻译多少或尝试让它在屏幕上更加正确,它永远不会超过内部g的宽度.
在进行故障排除时,我看到外部SVG元素的高度为960,宽度为500.附加的g的变换/转换为40,50.宽度最终为839px乘433.223px(不确定我理解这一点).由于内置边距,外部svg现在有一堆空间.
所以我试图增加附加到svg的g的宽度,这样我就可以将我的图例作为g的子项并将其移动到边距创建的空白区域.或者,我正在尝试创建另一个g,它是第一个g的兄弟,然后我可以使用边距创建的空白空间.
我不能上班,也不知道哪种方式最好.
我在HTML中有一个很长的长表,因此标签不会彼此嵌套.它看起来像这样:
<tr>
<td>A</td>
</tr>
<tr>
<td class="x">...</td>
<td class="x">...</td>
<td class="x">...</td>
<td class="x">...</td>
</tr>
<tr>
<td class ="y">...</td>
<td class ="y">...</td>
<td class ="y">...</td>
<td class ="y">...</td>
</tr>
<tr>
<td>B</td>
</tr>
<tr>
<td class="x">...</td>
<td class="x">...</td>
<td class="x">...</td>
<td class="x">...</td>
</tr>
<tr>
<td class ="y">I want this</td>
<td class ="y">and this</td>
<td class ="y">and this</td>
<td class ="y">and this</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
所以首先我要搜索树以找到"B".然后我想在B之后使用类y获取每个td标记的文本,但是在下一行表以"C"开始之前.
我试过这个:
results = soup.find_all('td')
for result in results:
if result.string == "B":
print(result.string)
Run Code Online (Sandbox Code Playgroud)
这让我得到了我想要的字符串B. 但是现在我想在此之后找到所有这些并且我没有得到我想要的东西.
for results in soup.find_all('td'): …Run Code Online (Sandbox Code Playgroud) 我正在用 BeautifulSoup 抓取一个页面,部分逻辑是有时<td>标签的部分内容可以包含<br>在其中。
所以有时它看起来像这样:
<td class="xyz">
text 1
<br>
text 2
</td>
Run Code Online (Sandbox Code Playgroud)
有时它看起来像这样:
<td class="xyz">
text 1
</td>
Run Code Online (Sandbox Code Playgroud)
我正在遍历这个并添加到一个 output_row 列表中,我最终将它添加到一个列表列表中。无论我看到前一种格式还是后一种格式,我都希望文本位于一个单元格中。
我找到了一种方法来确定我是否看到了<br>标签,因为 td.string 显示为 none 并且我还知道文本 2 中总是包含“ABC”。所以:
elif td.string == None:
if 'ABC' in td.contents[2]:
new_string = td.contents[0] + ' ' + td.contents[2]
output_row.append(new_string)
print(new_string)
else:
#this is for another situation and it works fine
Run Code Online (Sandbox Code Playgroud)
当我在 Jupyter Notebook 中打印它时,它显示为“text 1 text 2”作为一行。但是当我打开我的 CSV 时,它在两个不同的列中。因此,当 td.string 有内容(意味着没有<br>标签)时,文本 1 会显示在一列中,但是当我找到带有<br>标签的部分时,我的所有数据都会发生变化。
我不确定为什么在将它们附加到列表之前将它们连接起来时它显示为两个不同的字符串(两列)。 …