From The Good Earth to Lying Flat
FROM THE
GOOD EARTH
TO LYING FLAT
In The Good Earth, Wang Lung looks to land for security. This essay traces a related hope through housing, education and work in modern China. It asks how those paths can become sources of pressure—and why some people respond by “lying flat,” or stepping back from relentless competition.
What happens when the path to security becomes harder to trust?From The Good Earth to Lying Flat
How the search for family security becomes accumulation, involution, and withdrawal
Three paths through the argument
How to read this interpretation
The diagram proposes connections between insecurity, institutions and people’s responses. Select a connection to read the claim and its basis, then consider whether that link supports the larger argument.
Ribbon widths show the emphasis given to each connection. They are not measured probabilities or shares of the population.
The diagram distinguishes “lying flat,” a refusal to keep competing, from the exhausted withdrawal described by “rat people.” It also follows those who seek safety through secure institutional jobs. Loss of confidence can prompt people to leave a competition or to enter a different one.
How the diagram presents the argument
Six stages organize the claims. Color identifies each family of ideas, opacity shows the assigned confidence, and selecting a lens highlights related connections.
import { LinkedCharts, ProcessSankey, useSelectionActions } from "semiotic" // Docs demos use layoutExecution="sync" for deterministic first paint. // Production apps should use "auto" (default) so large graphs can use a worker. // The xExtent pins every concept to one of six authored stages. // Each edge has start/end times from its source and target stages. <ProcessSankey {...historyRiverDefaults} nodes={concepts.map((node) => ({ ...node, xExtent: [node.stage - 0.12, node.stage + 0.12], }))} edges={claims.map((edge) => ({ ...edge, startTime: stageOf(edge.source) + 0.12, endTime: stageOf(edge.target) - 0.12, }))} domain={[-0.22, 5.22]} axisTicks={sixStageHeadings} colorBy="family" edgeOpacity={(edge) => confidenceOpacity[edge.confidence]} nodeSizing="max" styleRules={[{ style: (node) => ({ fill: nodeHatches[node.id] }), // HatchFill }]} accessibleTable /> // A named selection leaves the geometry intact and fades nonmatching ribbons. // selectPoints({ claimLens: ["economic", "__node__"] })