Catalog.plot.shift
Catalog.plot.shift ¶
shift(
comparison: str,
max_rank: int = 50,
vertical: bool = True,
height: float | None = None,
width: float | None = None,
show_totals: bool = False,
rank_axis: RankAxisConfig | dict | None = None,
score_axis: ScoreAxisConfig | dict | None = None,
bar_config: ShiftBarConfig | dict | None = None,
label_config: LabelConfig | dict | None = None,
border_config: BorderConfig | dict | None = None,
zero_line_config: ZeroLineConfig | dict | None = None,
total_shift_config: TotalShiftConfig
| dict
| None = None,
scale_factor: float = 1.0,
show_legend: bool = False,
) -> alt.LayerChart | alt.VConcatChart | alt.HConcatChart
Makes a word shift plot (a stacked bar chart) of the top contributing tokens distinguishing two compared corpora.
Word shift plots can only be used with scores derived from weighted averages. For comparing
corpora using measures that are not weighted averages, use
Catalog.plot.bar instead.
Example
import wordlevel as wl
cl = wl.Catalog.from_dict_of_freqs(
{
"before": {"good": 12, "bad": 8, "happy": 6, "sad": 4},
"after": {"good": 5, "bad": 7, "happy": 3, "sad": 9},
}
).with_comparisons(
wl.comp("before", "after").score.proportion().alias("basic_comparison"),
wl.comp("before", "after")
.score.lexicon(wl.lex.labMT("english"))
.alias("weighted_avg_comparison"),
)
chart = cl.plot.shift("weighted_avg_comparison")
All bars are interpreted in terms of how the comparison corpus differs from the reference corpus. For details, see the scoring documentation. For each token, there are two stacked bars. One bar shows whether the token is relatively positive or negative and whether it was used more or less in the comparison versus the reference. The other bar shows whether the token's score is higher or lower in the comparison versus the reference. Tokens are ranked by the magnitude of both stacked bars together.
Mathematically, the bars are derived from the following formula. Let \(\tau\) be a token, and let \(p_\tau^{(\mathcal{C})}\) and \(\phi_\tau^{(\mathcal{C})}\) be the normalized frequency and score of \(\tau\) in corpus \(\mathcal{C}\) respectively. Then the contribution \(\delta_\tau\) of the token is:
where \(R\) and \(C\) are the reference and comparison corpora respectively, and \(\Phi^{(\text{ref})}\) is the user-provided reference score.
The stacked bars represent the two parts of the summand. The first bar is whether a word is relatively positive \((+ / -)\) and appears more or less in the comparison corpus \((\uparrow / \downarrow)\). The second bar is whether the score is more or less positive in the comparison corpus \((\bigtriangleup / \bigtriangledown)\). Note, the bars may counteract one another if the two summand terms are different signs: this is shown visually with faded bars in the word shift plot when that is the case.
Reference
For more details, see the following paper:
Gallagher, R. J., Frank, M. R., Mitchell, L., Schwartz, A. J., Reagan, A. J., Danforth, C. M., & Dodds, P. S. (2021). Generalized word shift graphs: a method for visualizing and explaining pairwise comparisons between texts. EPJ Data Science, 10(1), 4.
See Also
| Plot | Description |
|---|---|
Catalog.plot.bar |
Concise bar plot of comparisons scored with any measure |
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
str
|
The alias of a comparison in the catalog. See
|
required |
|
int
|
The maximum number of top-contributing tokens to display |
50
|
|
bool
|
Whether to orient the chart vertically, where tokens are listed top-to-bottom and
bars extend horizontally. If |
True
|
|
float | None
|
The height of the chart, in pixels. Ignored if |
None
|
|
float | None
|
The width of the chart, in pixels. Ignored if horizontal ( |
None
|
|
bool
|
Whether to show the overall total contributions of each score type and overall as an additional chart appended to the main chart |
False
|
|
RankAxisConfig | dict | None
|
Configuration for the rank axis. Accepts a |
None
|
|
ScoreAxisConfig | dict | None
|
Configuration for the score axis. Accepts a |
None
|
|
ShiftBarConfig | dict | None
|
Configuration for the bars. Accepts a |
None
|
|
LabelConfig | dict | None
|
Configuration for the bar labels. Accepts a |
None
|
|
BorderConfig | dict | None
|
Configuration for the border of the entire chart. Accepts a |
None
|
|
ZeroLineConfig | dict | None
|
Configuration for the zero line at the score-axis origin. Accepts a |
None
|
|
TotalShiftConfig | dict | None
|
Configuration for the grand total bar in the totals panels. Accepts a
|
None
|
|
float
|
Multiplier applied to the score axis when fitting it to the bar labels. Increasing it provides more space for the bar labels |
1.0
|
|
bool
|
Whether to show the chart legend |
False
|
Returns:
| Type | Description |
|---|---|
LayerChart | VConcatChart | HConcatChart
|
An Altair chart of the word shift plot |
Raises:
| Type | Description |
|---|---|
KeyError
|
If |
ValueError
|
If the comparison's measure is not a weighted average |